我正在研究数据结构和算法,这件事让我很困惑
二叉树的高度,因为它也用于AVL搜索树。
根据我正在阅读的书" Lipschutz的数据结构" ,它说"树T的深度(或高度)是T分支中的最大节点数。这比T的最大级数更多1。图7.1中的树7深度为5。"
图7.1:
A
/ \
/ \
/ \
/ \
B C
/ \ / \
D E G H
/ / \
F J K
/
L
但是,在其他几个资源上,高度的计算方式不同,但给出的定义相同。例如,我在网上阅读http://www.cs.utexas.edu/users/djimenez/utsa/cs3343/lecture5.html
"这是一个示例二叉树:
1
/ \
/ \
/ \
/ \
2 3
/ \ / \
/ \ / \
/ \ / \
6 7 4 5
/ \ / /
9 10 11 8
树的高度是所有节点深度的最大值。所以上面的树高3。"
另一个来源http://www.comp.dit.ie/rlawlor/Alg_DS/searching/3.%20%20Binary%20Search%20Tree%20-%20Height.pdf
说,"二叉树的高度 对于只有一个节点的树,根节点,如果有2,则高度定义为0 节点级别高度为1,依此类推。空树(除空节点外没有节点) 定义为高度为-1。 "
现在这最后两个解释相互符合,但没有与书中给出的例子相符。
另一个消息来源说"有两种约定来定义二叉树的高度 1)从根到最深节点的最长路径上的节点数。 2)从根到最深节点的最长路径上的边数。
在这篇文章中,遵循了第一个惯例。例如,下面树的高度为3。
1
/ \
2 3
/ \
4 5
" 在这里,我想问一下root和leaf之间的节点数和边数是否相同? 叶子节点的高度是什么,根据书应该是1(因为最大级别的数量是0,所以高度应该是0 + 1 = 1, 但通常说叶节点的高度为0。 为什么这本书提到深度和高度同样的东西呢? 这件事真的让我感到困惑,我已尝试从多个来源澄清,但似乎无法在两种解释之间做出选择。 请帮忙。
==>我想补充一下,因为现在我接受了这本书的惯例, 在AVL搜索树的主题中我们需要计算平衡因子(这是高度左右子树的差异) 它说:
C (-1)
/ \
(0) A G (1)
/
D (0)
括号中的数字是余额因素。
现在,如果我要跟随书的高度D是1而且G的右子树有高度(-1),因为它是空的,所以G的平衡因子应该是= 1 - ( - 1)= 2!< / p>
现在为什么D的高度在这里为0?
请帮助。
答案 0 :(得分:0)
如果你关心的是平衡因素,那么身高的确切定义并不重要。回想一下,平衡因子是
height(left) - height(right)
因此,如果两者都比您最喜欢的身高定义更大或更小,则平衡因子不会改变,只要您相应地重新定义空树的高度。
现在的问题是&#34;分支中的最大节点数&#34;定义既是递归的,也没有指定基本情况。但由于单元素树的高度是根据此定义的高度,因此零元素树的高度的明显选择为零,如果您计算出公式,您将发现它有效。
您也可以通过观察另一个定义的基本情况为-1来达到零值,否则它总是给出比&#34; max小1的值。分支中的节点&#34;定义