二叉树的高度

2025年03月17日 | 阅读 9 分钟

二叉树的高度或深度可以定义为从叶节点到根节点,或从根节点到叶节点的最大边数。根节点位于第零层,这意味着如果根节点没有任何子节点与之连接,则该二叉树的高度或深度为零。

让我们举一个例子来更好地理解二叉树的高度。

Height of Binary Tree

在上图中,我们有一个从名为 A 的根节点开始的二叉树。根节点 A 有两个子节点 B 和 C,分别是左子节点和右子节点。类似地,左子节点 B 只有一个名为 D 的左子节点,而右子节点 C 有两个子节点 E 和 F,其中节点 E 只有一个名为 G 的左子节点。

现在让我们来计算这棵二叉树的高度。要计算二叉树的高度,需要计算从根节点到最深叶节点的边数。这棵二叉树中最深的节点是 G。因此,为了计算这棵二叉树的高度或深度,我们需要计算根节点和最深节点 G 之间的边数。第一条边是从节点 A 到节点 C,第二条边是从节点 C 到节点 E,第三条边是从节点 E 到节点 G。所以,从根节点 A 遍历到最深节点 G 共有三条边,因此该二叉树的高度或深度为 3。我们从根节点到最深叶节点的路径是 A > C > E > G,这条路径在遍历过程中经过了三条边,这就是为什么根据二叉树高度的定义,这棵二叉树的高度是 3。

计算二叉树高度的方法

现在,让我们编写代码来计算二叉树的高度。有两种方法可以计算二叉树的高度。一种是**递归法**,另一种是**非递归法**,它将使用队列数据结构来计算二叉树的高度。

递归方式

首先,让我们看一下用递归方式计算二叉树的高度。

代码

输出:上述代码的输出是

Printing the nodes of tree level wise:
Level order traversal: 
(level 0) 150 
(level 1) 250 270 
(level 2) 320 350 

The height of the Binary tree is: 2

在递归方式中,我们重复调用 height() 函数来计算二叉树的高度。二叉树的根节点作为参数传递给 height() 函数。height() 函数计算根节点两个子树的高度,并将两者中较高的高度视为二叉树的高度。

非递归方式

现在让我们看一下用非递归方式计算二叉树的高度。

代码

输出

The Height(Depth) of the tree is: 2

在这种方法中,我们使用了非递归的方式来计算二叉树的深度。为了计算二叉树的高度,我们编写了一个名为 height 的函数,它需要一个 Node 类型的参数(即需要计算高度的二叉树的根节点)。二叉树的根节点位于第零层,这意味着根节点的高度或深度为零。

在非递归方法中,我们使用队列数据结构来计算二叉树的深度。我们想要计算深度的二叉树节点通过入队操作被添加到队列数据结构中,二叉树的节点作为参数传递给该函数。

一旦所有节点都添加到队列中,通过调用出队函数来移除队列中的节点,该函数会一直从队列中移除元素,直到遇到二叉树的空节点。每次从队列中移除一个二叉树节点时,代表二叉树深度的深度变量就会加一。最后,深度变量的值就代表了二叉树的最终深度。