我已经验证了avl插入代码的三个来源。在计算高度的所有情况下,
根高度=1最大值(self.getHeight(root.left),self。getHeight(根(右))
上面给出了一行。
这是我的问题,为什么我们要取左子树和右子树的最大值,并在其中添加一个?如果我们将节点添加到具有最小高度的子树中呢?在这种情况下,两者将具有相同的高度H而不是H 1。
此高度增量应添加为,
elif key < root.key:
root.left = self.insertNode(root.left, key)
root.height = 1 + self.getHeight(root.left)
else:
root.right = self.insertNode(root.right, key)
root.height = 1 + self.getHeight(root.right )
我说得对吗?如果是,为什么这些人在服用max后要添加一个?
请使用下面的完整代码进行验证。代码取自programiz。通用域名格式。还为极客验证了极客。
def insertNode(self, root, key):
if not root:
return TreeNode(key)
elif key < root.key:
root.left = self.insertNode(root.left, key)
else:
root.right = self.insertNode(root.right, key)
root.height = 1 + max(self.getHeight(root.left),
self.getHeight(root.right))
balanceFactor = self.getBalance(root)
if balanceFactor > 1:
if key < root.left.key:
return self.rightRotate(root)
else:
root.left = self.leftRotate(root.left)
return self.rightRotate(root)
if balanceFactor < -1:
if key > root.right.key:
return self.leftRotate(root)
else:
root.right = self.rightRotate(root.right)
return self.leftRotate(root)
return root
假设你有一棵这样的树:
5
/ \
/ \
3 7
/ / \
2 6 8
\
9
树的高度为3(根节点5和最深叶节点9之间有3个分支)。
子树的高度是左边的1(根在节点3)和右边的2(根在节点7)
3 = H(node(5)) = 1 + max(H(node(3)), H(node(7))) = 1 + max(1, 2)
现在假设您在树中添加了一个键为4的节点:
5
/ \
/ \
3 7
/ \ / \
2 4 6 8
\
9
在节点3扎根的树的高度没有增加:H(节点(3))仍然等于1。
如果在算法中执行建议的替换,则在所述插入之后,树将错误地获得2的高度:1h(节点(3))
,而不是保持高度等于3。
如果你的代码实际上已经被任何编程网站“验证”,那么就逃离那个网站,永远不要再信任他们。
本文向大家介绍在Javascript AVL树中插入节点,包括了在Javascript AVL树中插入节点的使用技巧和注意事项,需要的朋友参考一下 我们可以学习如何在AVL树中插入节点。AVL树中的插入与BST相同,只要我们在树上向下移动,我们只需在插入过程中执行一个额外的步骤,称为平衡树。 这需要计算我们之前已经看到的平衡因子。并且根据配置,我们需要调用适当的旋转方法。在以上说明的帮助下,这些都
我最近在C。。然后我尝试创建一个AVL。。这样做的第一步。就是在每个节点中添加一个额外的组件bf(平衡因子)。。我是这样做的。 每次malloc在插入时为新节点分配地址。。。我将其信息部分分配给用户输入的值。。将左右指针设置为NULL。除此之外,它还将新节点的bf分配给0。。在插入第一个节点(即根节点)后,程序下次在malloc部分甚至无法为新节点分配内存。。。只要我去掉写着newnode的部分-
AVL树是一种平衡的二元搜索树,即高度=O(log(n))。这是通过确保每个节点都遵循AVL树属性来实现的: 左侧子树(LST)的高度-右侧子树(RST)的高度在[-1,0,1]范围内 其中,对于给定节点,高度(LST)-高度(RST)称为平衡因子(BF)。 根据这个定义,叶子的高度是0。但是几乎每次讨论AVL树时,人们都认为叶子的高度是1。 我的问题是,我们能把叶子的高度取为0吗?这将使以下BS
我有一个二进制搜索树插入方法,可以工作。我正在尝试添加一个Trinode方法,如果高度不平衡,可以平衡它。在我的插入方法中,在插入项之后,在插入方法的末尾,我有一个if语句来检查它是否高度平衡。如果是,则打印“高度平衡”。否则,它会打印出“notheight balanced”,然后对我刚刚插入的项目调用triNodeRestructure方法。当我运行代码时,它在调用triNodeRestruc
本文向大家介绍在Javascript AVL树中计算平衡因子,包括了在Javascript AVL树中计算平衡因子的使用技巧和注意事项,需要的朋友参考一下 AVL树检查左子树和右子树的高度,并确保差异不超过1。该差异称为“平衡因子”。 例如,在以下树中,第一棵树是平衡的,接下来的两棵树是不平衡的- 在第二棵树中,C的左子树的高度为2,而右边子树的高度为0,所以差为2。在第三棵树中,A的右子树的高度
主要内容:src/runoob/binary/BinarySearchTreeInsert.java 文件代码:首先定义一个二分搜索树,Java 代码表示如下: public class BST < Key extends Comparable <Key >, Value > { // 树中的节点为私有的类, 外界不需要了解二分搜索树节点的具体实现 private class Node { private Key key ; private Val