我正在尝试编写Java中二元线程树的预序遍历代码。我编写了以下代码,它适用于一些示例,但我担心我忽略了一些边缘场景。
更多信息 一个节点有两个引用left和right,分别指向该节点的左子节点和右子节点。名为 successor 的 boolean 字段根据中序遍历确定 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;
}
}
}
}
任何帮助将不胜感激...:)
最佳答案
首先要做的事情...您应该编写单元测试来查找功能错误
但是这里似乎有一个错误... while 循环根本不执行
if(p!=null && prev.successor){
while(p!=null && !prev.successor){
上一个=p;
p=p.右;
}
}
您可能想将其替换为 do-while
关于java - java中的线程树前序遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543361/