您的位置:首页 > 其它

计算二叉树的最大高度

2018-01-11 09:52 363 查看
二叉树的高度有两种定义:

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

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

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



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

层级遍历法计算高度

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

创建空队列保存二叉树的每一层节点,初始化标识二叉树高度的变量height为0

一层一层地遍历二叉树,每向下遍历一层,高度height加1

计算每一层的节点数量,当下一层的节点为0时,结束遍历

代码如下:

/**
* 二叉树的高度:使用迭代方式,时间复杂度O(n)
*
* @param root 二叉树的根节点
* @return 二叉树的高度
*/
public int heightWithIterative(TreeNode root) {
if (root == null) {
return 0;
}

// 创建空队列保存二叉树的每一层节点
Queue<TreeNode> 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;
}

递归法计算高度

/**
* 二叉树的高度:使用递归,时间复杂度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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树高度