我有一个被破坏的二叉树,它必须通过确保所有的childNodes都可以被跟踪或者从rootNode中得到它们的源来修复。所以对于所有的childNodes,我想得到它们的根(通常应该是id:0)。
获取二叉树中每个节点的代码。
FOREACH nodes
CHECK RELATIONSHIP IF ROOT PARENT ID NOT 0
ID 7与根节点分离,如何运行检查以确定7、9和10与根节点断开连接。
在中,关于寻找计算二叉树直径的算法,提供了以下代码作为解决问题的可能答案。
public static int getDiameter(BinaryTreeNode root) {
if (root == null)
return 0;
int rootDiameter = getHeight(root.getLeft()) + getHeight(root.getRight()) + 1;
int leftDiameter = getDiameter(root.getLeft());
int rightDiameter = g
我试图想出一个从二叉树/二叉树中删除重复项的算法。到目前为止我能想到的是
将树的顺序遍历存储在数组中。
如果树没有排序,则对数组进行排序。
从数组中删除重复项并重建二叉树。
我们是否也需要存储树的预顺序遍历来重建树?
这使得复杂性出现在O(n log n )时间和O(n)空间上。我们能做得更好吗?伪代码/代码示例将不胜感激。
编辑1:假设二叉树的结构由以下对象提供
public class Node
{
int data;
Node right;
Node left;
// getters and setters for the left and right node
对于新的计算机科学作业,我们将使用有序二叉树实现一个列表/数组。我只想要一个建议,而不是一个解决方案。
这个想法是有一个二叉树,它的节点可以通过索引访问,例如
t = ListTree()
t.insert(2,0) # 1st argument is the value, 2nd the index to insert at
t.get(0) # returns 2
存储值的Node类是不可修改的,但它有一个属性size,它包含下面的子节点的总数,以及指向子节点并相应地存储值的left、right和value。
我目前的主要问题是跟踪索引-因为我们不允许在节点本身中存储节点的索引,所以我必须
我只想知道下面的算法在二叉树中找到两个节点的最低公共祖先的效率如何。
Node getLowestCommonAncestor (Node root, Node a, Node b) {
Find the in-order traversal of Node root.
Find temp1 = the in-order successor of Node a.
Find temp2 = the in-order successor of Node b.
return min (temp1, temp2);
}
完全树是一棵树,每个层次都被完全填充,an 几乎完全树是一棵树,如果最后一层没有完全填充,那么所有节点都尽可能地保持在最左边。我的困惑出现在以下二叉树示例中:
O
/ \
O O
/ \ / \
O O O O
/ \
O O
根据定义,它应该是一个不完全的二叉树,但它是一个完整的二叉树。这怎么是一个完整的二叉树,为什么它不是一个不完整的二叉树?
在我的程序中,我有一个用于二叉树的preOrder Iterator类。在它中,我试图在++操作符上实现操作符重载,以便从头到尾遍历树。但是我很困惑,因为二叉树可以有左的和右的。我怎么知道开始的地方?它总是最左边的节点吗?
这是我的代码结构:
父二叉树:
/* Binary Tree */
class bin_tree
{
public:
int data;
bin_tree *left;
bin_tree *right;
bin_tree *parent;
class preOrder_iterator; //child iterator class