当前位置: 首页 > 知识库问答 >
问题:

java中的线程树预排序遍历

周承天
2023-03-14

我试图在java中编写一个二进制线程树的前序遍历代码。我编写了下面的代码,它适用于一些示例,但我担心我忽略了一些边缘场景。

MORE INFO一个节点有两个引用左右分别指向节点的左右子节点。一个名为继任者的布尔字段根据无序遍历确定右指针指向子节点还是继任者(如果继任者==false:右指向子节点,否则指向无序遍历继任者)

如果有人能指出我逻辑上的缺陷,我将不胜感激...

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个答案

姜羽
2023-03-14

首先...您应该编写单元测试来查找功能错误

然而你似乎有一个错误在这里。。。而循环根本不执行

if(p!=null)

你可能想用do while来代替它

 类似资料:
  • 我已经实现了一种方法来对一棵树(不是二叉树)进行预排序遍历。此树的每个父节点都有一个子节点数组,因此我使用的方法是: 将子节点链接到父节点“tnAA”的示例 但它只输出根节点,这种方法有什么问题? 解决方案:将children数组链接到每个parent:tnaa . setchildern(AA _ childern);

  • 我仍然是Java的初学者。我刚刚学习了二分搜索法树和前序遍历的概念,以及如何使用递归来实现二叉树的前序遍历。大概是这样的: 但是,如何为 N 元树实现相同的递归模型呢?其中每个节点的子节点数不一定为 2?因为.left和.right将不适用,不是吗?如果需要提供更多代码,请lmk,谢谢。

  • 我需要执行一个三元树的预购遍历。我很熟悉二叉树上的这种遍历,比如: 它按根、左、右顺序遍历。我很困惑如何在添加了中间子节点的情况下做到这一点。如果有人能解释这个,那就太好了。谢谢

  • 对于二叉搜索树:7为根,1为左子,10为右子。 我试过调试这个函数,看看它是如何工作的,但我似乎不能理解一件事。函数检查并看到1的左子项和右子项都为空后,它就移动到节点10,然后检查右子项是否为空。有人能解释一下递归模式,以及为什么方法在初始检查节点1后没有退出。

  • (为了避免冗长的解释,我所要寻找的只是java中泛型树(n元树)的级别顺序遍历。提供的代码正常工作,需要级别顺序显示功能。环顾四周一个小时,但找不到通用n元树的参考。如果soemone能帮助我在代码上构建LevelOrderDisplay函数,我将不胜感激,因为它将帮助我理解我遇到的队列错误。谢谢 我一直在尝试在工作中实现Autosys作业计划的树表示。由于每个作业(流程)可以有一个或多个依赖作业

  • 本文向大家介绍在Javascript树中进行预遍历,包括了在Javascript树中进行预遍历的使用技巧和注意事项,需要的朋友参考一下 在这种遍历方法中,首先访问根节点,然后是左子树,最后是右子树。 我们从A开始, 并在进行预遍历之后,首先访问 A 本身,然后移至其左子树B。B 也进行了预遍历。一直进行到访问所有节点为止。该树的预遍历的输出将是- 这是我们将要实现的算法: 打印节点的数据 递归遍历