我已经实现了一种方法来对一棵树(不是二叉树)进行预排序遍历。此树的每个父节点都有一个子节点数组,因此我使用的方法是:
void preorderTraversal(TreeNode tree)
{
if (tree == null)
return;
System.out.print(tree.element + " ");
for(TreeNode child : tree.childern) // children is an Arraylist
{
preorderTraversal(child);
}
}
将子节点链接到父节点“tnAA”的示例
/* Creating Object of class tree*/
Tree tree = new Tree();
tree.setRoot(tnAA);
TreeNode root2 = tree.getRoot();
/* creating the links between nodes of Tree*/
ArrayList<TreeNode> AA_children = new ArrayList<TreeNode>();
AA_children.add(tnBB);
AA_children.add(tnCC);
AA_children.add(tnDD);
tnBB.parent=tnAA; tnCC.parent = tnAA; tnDD.parent = tnAA;
// Tree
// A
// / | \
// B C D
// /\ |
// E F G
但它只输出根节点,这种方法有什么问题?
解决方案:将children数组链接到每个parent:tnaa . setchildern(AA _ childern);
您永远不会将任何内容添加到任何节点的child dern
列表中。您创建了一个名为AA_childern
的ArrayList,但它没有连接到树,并且树不知道或不关心它的存在。这些子节点需要添加到tnAA.childern
。
附言:正确的拼写是“孩子”。
我仍然是Java的初学者。我刚刚学习了二分搜索法树和前序遍历的概念,以及如何使用递归来实现二叉树的前序遍历。大概是这样的: 但是,如何为 N 元树实现相同的递归模型呢?其中每个节点的子节点数不一定为 2?因为.left和.right将不适用,不是吗?如果需要提供更多代码,请lmk,谢谢。
我需要执行一个三元树的预购遍历。我很熟悉二叉树上的这种遍历,比如: 它按根、左、右顺序遍历。我很困惑如何在添加了中间子节点的情况下做到这一点。如果有人能解释这个,那就太好了。谢谢
我试图在java中编写一个二进制线程树的前序遍历代码。我编写了下面的代码,它适用于一些示例,但我担心我忽略了一些边缘场景。 MORE INFO一个节点有两个引用左右分别指向节点的左右子节点。一个名为继任者的布尔字段根据无序遍历确定右指针指向子节点还是继任者(如果继任者==false:右指向子节点,否则指向无序遍历继任者) 如果有人能指出我逻辑上的缺陷,我将不胜感激... 任何帮助将不胜感激...:
对于二叉搜索树:7为根,1为左子,10为右子。 我试过调试这个函数,看看它是如何工作的,但我似乎不能理解一件事。函数检查并看到1的左子项和右子项都为空后,它就移动到节点10,然后检查右子项是否为空。有人能解释一下递归模式,以及为什么方法在初始检查节点1后没有退出。
我正在查看LeetCode问题98。验证二进制搜索树: 给定二叉树的,确定它是否是有效的二叉搜索树 (BST)。 有效的BST定义如下: 节点的左子树仅包含键小于节点键的节点。 节点的右子树仅包含键大于节点键的节点。 左右子树也必须是二叉搜索树。 下面提供的用前序遍历验证二叉树属性的代码有什么问题? 对于的测试用例,它将返回
本文向大家介绍在Javascript树中进行预遍历,包括了在Javascript树中进行预遍历的使用技巧和注意事项,需要的朋友参考一下 在这种遍历方法中,首先访问根节点,然后是左子树,最后是右子树。 我们从A开始, 并在进行预遍历之后,首先访问 A 本身,然后移至其左子树B。B 也进行了预遍历。一直进行到访问所有节点为止。该树的预遍历的输出将是- 这是我们将要实现的算法: 打印节点的数据 递归遍历