我正在学习数据结构和算法,这个东西真的让我很困惑
二叉树的高度,因为它也用于AVL搜索树。
根据我正在阅读的书《DATA STRUCTURES by 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
"在这里,我想问的是,根和叶之间的节点数和边数如何保持一致?那么叶节点的高度是多少呢,书上说它应该是1(因为最大的层数是0,所以高度应该是0+1=1,但是通常说叶节点的高度是0。还有,为什么书中提到深度和高度是一样的?这件事真的真的让我很困惑,我试着从一些来源澄清,但似乎无法在两种解释之间做出选择。请帮助。
==>我想补充一点,因为现在我接受了这本书的惯例,在AVL搜索树的主题中,我们需要计算BALANCE FACTOR(即左右子树的高度差)。上面写着:
C (-1)
/
(0) A G (1)
/
D (0)
括号内的数字为平衡因子。
现在,如果我要遵循D的书的高度为1,并且G的右子树的高度为(-1),因为它是空的,所以G的平衡因子应该= 1-(-1)=2!
为什么这里D的高度为0呢?
请帮。
如果你关心的是平衡因素,那么身高的确切定义并不重要。回想一下,平衡因子是
height(left) - height(right)
所以如果两者都比你喜欢的高度定义大一个或小一个,平衡因子不会改变,只要你相应地重新定义空树的高度。
现在的问题是,"分支中最大节点数"的定义既是递归的,但没有指定基本情况。但是,由于根据这个定义,单元素树的高度为1,显然,零元素树的高度选择为0,如果你算出公式,你会发现这是正确的。
您也可以通过观察其他定义的基本情况为-1来获得零值,否则它总是给出比"最大值"小1的值。