Inorder 순회 결과를 LinkedList에 저장하고 반복자로 검색하려고하지만 결과를 인쇄하는 동안 널 포인터 예외가 발생합니다. 내 함수에서 재귀 및 인쇄 값을 사용하여 올바른 결과를 얻었습니다. 재귀 적으로 inorderItr(root.left)
에 전화를 걸면 root
이 null로 표시됩니다. 내 return 문이 정확하지 않다고 생각합니다. 아래 코드는 내 코드가 손상되어있는 부분입니다. 모든 도움과 개념은 높이 평가됩니다. 내가 Iterator
을 돌려 주려고 노력하면서, 내가 this를 보았다. 그러나 doesnt 한 도움. 다시 말하지만, 나는 Java와 새로운 개념이 Iterator
입니다. TIA.바이너리 트리에서 Inorder traversal에 대한 Iterator를 반환하는 방법은 무엇입니까?
편집 : 솔루션, 나는 중위 순회 글로벌 LinkedList의를위한 도우미 메서드를 만들었습니다
class TreeNode {
int data;
TreeNode left;
TreeNode right;
public TreeNode(int d) {
data = d;
}
}
public class TreeTraversal {
TreeNode root;
public TreeTraversal() {
root = null;
}
static List<TreeNode> l = new LinkedList<TreeNode>();
public static Iterator<TreeNode> inorderItr(TreeNode root) {
List<TreeNode> l = new LinkedList<TreeNode>();
//I think I am missing something here
if (root == null)
return
//This is where my root is null
inorderItr(root.left);
l.add(root);
inorderItr(root.right);
Iterator<TreeNode> itr = l.iterator();
return itr;
}
//This code works fine
public static void inorderWorksFine(TreeNode root) {
if (root == null)
return;
inorder(root.left);
System.out.print(root.data + " ");
inorder(root.right);
}
public static void main(String args[]) {
TreeTraversal t = new TreeTraversal();
t.root = new TreeNode(10);
t.root.left = new TreeNode(5);
t.root.left.left = new TreeNode(1);
t.root.left.right = new TreeNode(7);
t.root.right = new TreeNode(40);
t.root.right.right = new TreeNode(50);
// inorderWorksFine(t.root);
Iterator<TreeNode> itr = inorderItr(t.root);
while (itr.hasNext()) {
System.out.println(itr.next().data + " ");
}
}
}
가능한 복제 (https://stackoverflow.com/questions/12850889/in-order-iterator-for-binary-tree) – vinS
@vinS : Iterator를 반환하려고합니다. 그 해결책을 보았습니다. 위의 코드를 변경하고 그 문제가 무엇이겠습니까? – Techiee
추천 된 iterator 인터페이스를 구현하는 클래스를 만드는 것이 좋습니다. 새로운 재귀 적 단계에서 반복자를 반복하여 무서운 성능을 사용하지 않고도 데이터 반복자를 반환하는 재귀 적 메서드를 만드는 것은 정말 힘든 일입니다. 게다가, 다른 구조 (LinkedList)로 변환하여 반복자를 작성하면 값 비싼 초기 지출 비용이있는 경우 Tree를 사용하는 목적을 다소 상실 할 수 있습니다. – Zachary