首页 文章

在java中的线程树预订序列

提问于
浏览
2

我正在尝试为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 回答

  • 2

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

    但是你似乎有一个错误...虽然循环根本没有执行

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

    您可能希望用do-while替换它

相关问题