我正在尝试为java中 Binary Threaded 树的 preorder 遍历编写代码 . 我写了下面的代码,它只举几个例子,但是我忽略了一些边缘情况 .
MORE INFO 节点有两个引用,分别左右指向节点的左子节点 . 名为successor的布尔字段根据inorder遍历确定右指针是指向子项还是后继项(如果successor == false:right指向child,则指向inorder遍历后继者)
如果有人能在这里指出我的逻辑中的缺陷,我将不胜感激......
public void threadedPreorder(){
IntThreadedTreeNode prev, p=root; //pointers to binary tree nodes
while(p!=null){
while(p.left!=null){ //traversal to leftmost node
visit(p); //while visiting it
p=p.left;
}
visit(p);
prev=p;
p=p.right; //shift to right or successor
if(p!=null && prev.successor){ //avoid visiting the same node twice
while(p!=null && prev.successor){
prev=p;
p=p.right;
}
}
}
}
任何帮助,将不胜感激...:)
1 回答
首先要做的事情......你应该编写单元测试来发现功能性错误
但是你似乎有一个错误...虽然循环根本没有执行
if(p!=null && prev.successor){ while(p!=null && !prev.successor){ prev=p; p=p.right; } }
您可能希望用do-while替换它