计算二叉树的最大高度

计算二叉树的最大高度

二叉树的高度有两种定义:

从根节点到最深节点的最长路径的节点数。

从根到最深节点的最长路径的边数。

在这篇文章中,我们采用第一种定义。例如,下面这棵树的高度是3:

计算二叉树高度有两种方法,一种是使用二叉树的层级遍历法,一种是使用递归法。

层级遍历法计算高度我们可以使用二叉树的层级遍历法来计算二叉树的高度,这种方式的主要步骤是:

创建空队列保存二叉树的每一层节点,初始化标识二叉树高度的变量height为0一层一层地遍历二叉树,每向下遍历一层,高度height加1计算每一层的节点数量,当下一层的节点为0时,结束遍历代码如下:

代码语言:javascript复制 /**

* 二叉树的高度:使用迭代方式,时间复杂度O(n)

*

* @param root 二叉树的根节点

* @return 二叉树的高度

*/

public int heightWithIterative(TreeNode root) {

if (root == null) {

return 0;

}

// 创建空队列保存二叉树的每一层节点

Queue queue = new LinkedList<>();

// 把root节点加入队列并初始化高度为0

queue.add(root);

int height = 0;

while (queue.size() > 0) {

// 获取当前层级的节点数量

int nodeCount = queue.size();

if (nodeCount == 0) {

break;

}

// 高度加1

height++;

// 取出并移除当前层级的节点,并将下一层级的节点放入队列中

while (nodeCount > 0) {

TreeNode node = queue.remove();

if (node.left != null) {

queue.add(node.left);

}

if (node.right != null) {

queue.add(node.right);

}

nodeCount--;

}

}

return height;

}递归法计算高度代码语言:javascript复制 /**

* 二叉树的高度:使用递归,时间复杂度O(n)

*

* @param root

* 二叉树的根节点

* @return 二叉树的高度

*/

public int height(TreeNode root) {

if (root != null) {

// 左子树与右子树的高度取最大值加上当前节点

return Math.max(height(root.left), height(root.right)) + 1;

}

return 0;

}参考链接:Iterative Method to find Height of Binary Tree