我试图为java中二进制线程树的预订遍历编写代码。我写了下面的代码,并举一些例子,但我担心我会忽略一些边缘情况。
更多信息 节点有两个引用 left 和 right 分别指向节点的左右子节点。名为 successor 的布尔字段根据inorder遍历确定 right 指针是指向子项还是后继项(如果successor == false: right 指向孩子,否则指向顺序遍历继承者)
如果有人能在这里指出我的逻辑中的缺陷,我将不胜感激......
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;
}
}
}
}
任何帮助将不胜感激......:)
答案 0 :(得分:2)
首先要做的事情......你应该编写单元测试来查找功能错误
但是你似乎有一个错误......而循环根本不执行
if(p!=null && prev.successor){
while(p!=null && !prev.successor){
prev=p;
p=p.right;
}
}
您可能希望将其替换为do-while