이 기사에서는 이진 트리의 모든 경로를 인쇄하는 Java 방법에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
질문:
이진 트리를 제공하고 모든 경로를 인쇄하십시오.
예를 들어, 다음 바이너리 트리의 경우 모든 경로는 다음과 같습니다.
8-> 3-> 1
8-> 2-> 6-> 4
8-> 3-> 6-> 7
8-> 10-> 14-> 13
아이디어 :
루트 노드에서 시작하여 자신의 값을 배열에 넣은 다음이 배열을 하위 노드로 전달하십시오. 하위 노드는 또한이 배열에 자체 값을 넣고이 노드가 리프 노드가 될 때까지 하위 노드로 전달한 다음 배열을 인쇄합니다. 따라서 여기에서 재귀를 사용해야합니다.
암호:
/** 이진 트리가 주어지면 라인 당 하나의 뿌리-잎 경로를 인쇄합니다. 재귀 도우미를 사용하여 작업을 수행합니다.*/public void printpaths (노드 루트, int n) {string [] path = new String [n]; PrintPaths (루트, 경로, 0);}/** 재귀 인쇄 경로 헬퍼-노드와 루트 노드에서이 노드를 포함하지만 경로를 포함하지 않는 경로를 포함하는 배열은 모든 루트 리프 경로를 인쇄합니다.*/private void printpaths (노드 노드, 문자열 [] 경로, int 경로) {if (node == null) 반환; //이 노드를 경로 배열 경로에 부여 [pathlen ++] = node.value; // 잎이므로 (node.leftchild == null && node.rightchild == null) {printArray (path, pathlen); } else {// 그렇지 않으면 두 트리를 시도해보십시오. 인쇄 경로 (node.leftchild, path, pathlen); printpaths (node.rightchild, path, pathlen); }}/** 한 줄의 배열에서 문자열을 인쇄하는 유틸리티.*/private void printArray (string [] ints, int len) {for (int i = 0; i <len; i ++) {system.out.print (ints [i]+""); } system.out.println ();}참고 : 배열 + 값 만 사용하여 필요한 경로를 인쇄 할 수 있습니다. LinkedList와 같은 링크 된 목록 구조를 사용하는 경우 작동하지 않습니다. 이유를 분석 할 가치가 있습니다. 매우 흥미 롭습니다.
Java 알고리즘에 대한 자세한 내용은이 사이트에 관심이있는 독자들이 주제를 볼 수 있습니다. "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약"및 "Java Cache Operation Tips의 요약"을 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.