前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >计算二叉树的最大高度

计算二叉树的最大高度

作者头像
九州暮云
发布2019-08-21 11:18:15
4.8K0
发布2019-08-21 11:18:15
举报
文章被收录于专栏:九州牧云

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

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

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

输入图片说明
输入图片说明

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

层级遍历法计算高度

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

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

代码如下:

代码语言:javascript
复制
       /**
	 * 二叉树的高度:使用迭代方式,时间复杂度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;
	}

递归法计算高度

代码语言: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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 层级遍历法计算高度
  • 递归法计算高度
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档