이진 트리의 경우 재귀 적으로 수행 할 수있는 여러 가지 유형의 트래버스가 있습니다. 그들은 방문한 순서대로 작성됩니다 (L = 왼쪽 자식, V = 해당 노드 방문, R = 오른쪽 자식).
- 인 - 순서 탐색 (LVR)
- 역순 탐색 (RVL)
- 전순 주사 (VLR)는 (LRV)는
귀하의 코드가 나타납니다
Postorder 통과는을 수행 할 postorder traversal 메서드를 사용하지만 몇 가지 사항이 섞여 있습니다. 먼저
노드이 트래버스하려는 대상입니다.
데이터은 귀하가 방문하기를 원하는 것입니다. 둘째, 노드 자체를 반환 할 이유가 없습니다.이 방식이 구현됩니다. 귀하의 코드는 '
특정 데이터를 찾고 있는데, 노드 No @ 0xdeadbeef가 있습니까?'라는 조건을 허용하지 않습니다. 이것은 일종의 추가 검색 매개 변수로 발견됩니다.
학술 BST 통과는 노드 자체 만 인쇄합니다. 검색 기능을 추가하려는 경우 올바른 노드에 대한 추가 검사는 물론 하나의 매개 변수가 추가됩니다.
여기에 코드 조각입니다 :
// Academic
public void traverse (Node root){ // Each child of a tree is a root of its subtree.
if (root.left != null){
traverse (root.left);
}
System.out.println(root.data);
if (root.right != null){
traverse (root.right);
}
}
// Search with a valid node returned, assuming int
public Node traverse (Node root, int data){ // What data are you looking for again?
if(root.data == data) {
return root;
}
if (root.left != null){
return traverse (root.left, data);
}
if (root.right != null){
return traverse (root.right, data);
}
return null;
}
은'traverse' 방법은 이진 트리에서 요소를 사용하는 것입니다하지만 당신은 루트'null' 경우에도 왼쪽 루트, 루트 오른쪽 또는 루트 (반환있어!). 재귀 함수에 대한 아이디어는 기본 케이스를 정의한 다음 그 기본 케이스까지 얻을 반복 코드를 정의하는 것입니다. –
어떤 종류의 탐색을하려고합니까? 그것은'BST'입니까? 'BST'에서 올바른 위치에 노드를 삽입해야합니까? – noMAD
왼쪽으로 횡단하는 경우 4 번 줄의 마지막 단계로 돌아가고 오른쪽으로 이동하지 않으며 currentNode를 반환하지 않습니다. 그건 괜찮아 보이지 않아. –