java - java中的线程树前序遍历

标签 java binary-tree preorder

我正在尝试编写Java中二元线程树的预序遍历代码。我编写了以下代码,它适用于一些示例,但我担心我忽略了一些边缘场景。

更多信息 一个节点有两个引用leftright,分别指向该节点的左子节点和右子节点。名为 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/

相关文章:

android - Android 可以使用标准构建的 JAR 文件吗?

java - Mockito - 验证 double 值

java - Android 应用程序中的调试错误

c++ - 二叉树根为空

python - 将表达式转换为二叉树的算法

java - 为什么在静态初始化器中使用并行流会导致不稳定的死锁

java - 为什么在我的 LinkedBinaryTree 实现中只添加了根

c++ - 基于 vector 的二叉树遍历

c - 如何从二叉树创建链表(前序/后序)

algorithm - 给定 AVL 树的 PreOrder 遍历。这棵树是独一无二的吗?