计算二叉树的最大高度
2018-01-11 09:52
363 查看
二叉树的高度有两种定义:
从根节点到最深节点的最长路径的节点数。
从根到最深节点的最长路径的边数。
在这篇文章中,我们采用第一种定义。例如,下面这棵树的高度是3:
计算二叉树高度有两种方法,一种是使用二叉树的层级遍历法,一种是使用递归法。
创建空队列保存二叉树的每一层节点,初始化标识二叉树高度的变量height为0
一层一层地遍历二叉树,每向下遍历一层,高度height加1
计算每一层的节点数量,当下一层的节点为0时,结束遍历
代码如下:
参考链接:Iterative Method to find Height of Binary Tree
从根节点到最深节点的最长路径的节点数。
从根到最深节点的最长路径的边数。
在这篇文章中,我们采用第一种定义。例如,下面这棵树的高度是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
相关文章推荐
- 每天一道LeetCode-----计算二叉树的最大深度及最小深度,判断二叉树是否是高度平衡二叉树
- C++求二叉树的最大高度差
- 计算二叉树的高度和结点数
- CODEVS 1501 二叉树最大宽度和高度
- 计算二叉树的高度中序迭代版本,有错误待定位
- 面试题5:计算二叉树中最大节点到最小节点之间的距离
- codevs 1501 二叉树最大宽度和高度x
- wikioi1501 二叉树最大宽度和高度
- 树 二叉树最大宽度和高度
- CODE[VS] NO.1501 二叉树最大宽度和高度
- CODE[vs] 天梯 1501 二叉树最大宽度和高度
- [WikiOI] 2.6.1 二叉树最大宽度和高度
- 二叉树的最大宽度和高度
- 判断二叉树是否平衡,计算树的高度
- 1501 二叉树最大宽度和高度
- 每天一道LeetCode-----计算二叉树的最大路径和,路径只需要从一个节点到达另一个节点,无其他要求
- 二叉树最大宽度和高度(codevs1501)
- C++计算二叉树的节点数和高度
- 1501 二叉树最大宽度和高度
- codevs1501 二叉树最大宽度和高度