Answers:
有几种定义“平衡”的方法。主要目标是使所有节点的深度保持为O(log(n))
。
在我看来,您所讨论的平衡条件适用于AVL树。
这是AVL树的平衡条件的正式定义:
对于AVL中的任何节点,其左子树的高度与其右子树的高度最多相差1。
下一个问题,什么是“ 身高 ”?
二叉树中节点的“ 高度 ”是从该节点到叶子的最长路径的长度。
有一种奇怪但常见的情况:
人们将空树的高度定义为
(-1)
。
例如,root的左孩子是null
:
A (Height = 2)
/ \
(height =-1) B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
\
C (Height = 0)
还有两个例子可以确定:
是的,一个平衡树示例:
A (h=3)
/ \
B(h=1) C (h=2)
/ / \
D (h=0) E(h=0) F (h=1)
/
G (h=0)
不,不是平衡树示例:
A (h=3)
/ \
B(h=0) C (h=2) <-- Unbalanced: 2-0 =2 > 1
/ \
E(h=1) F (h=0)
/ \
H (h=0) G (h=0)
这两件事没有区别。想一想。
让我们做一个更简单的定义:“一个正数是偶数,即使它是零或该数减去二是偶数。” 这是说8等于6还是偶数?还是说8、6、4、2和0是偶数?
没有区别 如果说8即使6是偶数,也说6即使4是偶数。因此,即使2是偶数,也说4是偶数。因此,即使0为偶数,也表示2为偶数。因此,如果说8等于6是偶数,则(间接地)说8等于6、4、2和0是偶数。
这是同一件事。任何间接子树都可以通过一系列直接子树找到。因此,即使仅直接应用于直接子树,也仍然间接应用于所有子树(因此也包括所有节点)。
平衡树是高度为log(树中元素数)的树。
height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree
给出的定义是“一棵树是平衡的,每个子树是平衡的,并且两个子树的高度最多相差一个”,后面是AVL树。
由于AVL树是平衡树,但并非所有平衡树都是AVL树,因此平衡树不具有此定义,并且内部节点可能不平衡。但是,AVL树要求平衡所有内部节点。
平衡树的目的是以最小的遍历(最小高度)到达叶子。树的程度是分支数减去1。平衡树可能不是二叉树。