在java中的线程树预订序列

时间:2015-07-21 15:27:03

标签: java binary-tree preorder

我试图为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;
                }
            }
        }
    }

任何帮助将不胜感激......:)

1 个答案:

答案 0 :(得分:2)

首先要做的事情......你应该编写单元测试来查找功能错误

但是你似乎有一个错误......而循环根本不执行

if(p!=null && prev.successor){ while(p!=null && !prev.successor){ prev=p; p=p.right; } }

您可能希望将其替换为do-while