在AVL树插入的标准过程中,在插入新节点后,我们将从下到上进行调整,在此过程中,子树高度可能会增加一(因为插入和旋转)操作),而子树(高度增加一个后),左/右孩子的身高仍然相同?如果是这样,一个例子是值得赞赏的,如果没有,如果有人能够解释原因,那将是很好的。谢谢。 :)
以下是对AVL树(https://en.wikipedia.org/wiki/AVL_tree)
的引用的问候, 林
答案 0 :(得分:4)
平衡二叉树具有最小可能的最大高度(a.k.a. 对于叶节点,因为对于任何给定数量的叶节点 叶节点放置在尽可能高的位置。
一种常见的平衡树结构是二叉树结构 每个节点的左右子树的高度不再相同 比1
例如:
这是一棵平衡的树。
如果我们插入1
,它的高度会增加1.但它又是一棵平衡的树。因为左右子树的高度不超过1。
我认为你错误地使用了术语 balance 。您认为平衡没有高度差,但在定义中最多只有1个高度差。
你的问题:
在AVL树插入的标准过程中,子树高度可能增加一个(因为插入和旋转操作),而子树(高度增加一个之后)仍然具有相同的高度左/右孩子?
如果我们有一个从左右分支具有相同高度的树,并且如果我们将一个节点插入到左分支的叶节点中,则高度会增加,因为树的高度为maximum(height(left_branch, right_branch))
。因为此操作后height(left_branch)
等于height(right_branch)+1
。所以,他们不能平等。
简而言之,您的前提是height(left_branch) == height(right_branch)
您的操作是increasing height of left_branch by 1
所以height(left_branch) == height(right_branch)
条件不再是真的。
答案 1 :(得分:1)
插入后无法使子树的左右子项保持高度变化相同。
让我们考虑一个在子树中只有<3个节点的简单示例。平衡因子的可能性是,
对于具有余额系数+1的SubTree,
对于具有平衡因子-1的SubTree,
对于具有余额系数0的SubTree,
因此,不可能改变高度并且仍然具有相同的左右儿童身高。