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

无树的预序遍历

仉成益
2023-03-14

我仍然是Java的初学者。我刚刚学习了二分搜索法树和前序遍历的概念,以及如何使用递归来实现二叉树的前序遍历。大概是这样的:

Void preorder(node root){
if(root==null){//base case when node becomes null we stop recursive function
return ;}
System.out.print(root.data+" ");// printing the value of node as first time we visit
Preorder(root.left);// look at left side of tree ,once left side complete
Preorder(root.right);// start having a look at right side of that specific node
}

但是,如何为 N 元树实现相同的递归模型呢?其中每个节点的子节点数不一定为 2?因为.left和.right将不适用,不是吗?如果需要提供更多代码,请lmk,谢谢。

共有1个答案

胡星汉
2023-03-14

而不是只有两个孩子,树可以有n个孩子。所以你需要将子级建模为一个列表,例如ArrayList

class Node {
    String data;
    List<Node> children = new ArrayList<>();

    public void addChild(Node node) {
        this.children.add(node);
    }
    
}

然后迭代预序遍历中的子项:

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

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

  • 我试图在java中编写一个二进制线程树的前序遍历代码。我编写了下面的代码,它适用于一些示例,但我担心我忽略了一些边缘场景。 MORE INFO一个节点有两个引用左右分别指向节点的左右子节点。一个名为继任者的布尔字段根据无序遍历确定右指针指向子节点还是继任者(如果继任者==false:右指向子节点,否则指向无序遍历继任者) 如果有人能指出我逻辑上的缺陷,我将不胜感激... 任何帮助将不胜感激...:

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

  • 为了上课,我必须创建一个状态对象的二叉树,每个状态对象包括一个居民对象的二叉树,这些居民对象组织住在每个州的人。我试图在一个给定的州中搜索最老的居民;然而,居民是按字母顺序组织在树中的,这对我的搜索毫无帮助。因此,我必须遍历整个居民树,更新保存最老的人的节点,并在树被完全遍历后返回它。我已经有了代码的第一部分,但是还停留在如何写递归的剩余部分。 状态树的方法: 然后是公共“包装器”状态树方法:

  • 我正在查看LeetCode问题98。验证二进制搜索树: 给定二叉树的,确定它是否是有效的二叉搜索树 (BST)。 有效的BST定义如下: 节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。 左右子树也必须是二叉搜索树。 下面提供的用前序遍历验证二叉树属性的代码有什么问题? 对于的测试用例,它将返回