计算二叉树的最大高度 

2023-05-16

 

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

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

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

在这篇文章中,我们采用第一种定义。例如,下面这棵树的高度是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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算二叉树的最大高度  的相关文章

随机推荐

  • Tomcat 9安装配置教程

    首先 xff0c 先去这个网址下载Tomcat 9 http tomcat apache org 然后根据自己的电脑系统版本去下载相对应的文件 xff01 我的系统版本是 Windows 10 64位 xff0c 所以我选择 34 64 b
  • Ef Core 使用Entity方式配置外键

    一 Ef Core 使用Entry方式配置外键 当一个表中有多个外键指向同一个表时候 xff0c 需要使用Entity方式执行具体外键约束名称 xff0c 使用方法如下 xff1a protected override void OnMod
  • Python安装后目录在哪儿_如何查看Python的安装目录

    一 Python的安装录 当前安装版本为 xff1a python 3 10 4 1 在安装python的时候可以看到安装目录 xff0c 可以修改安装目录 xff1a 2 windows系统下64位安装目录如下 xff1a 跟其他软件不太
  • linux下完全删除mysql

    linux下完全删除mysql 查询所有mysql的服务并停止所有mysql服务 查询自启服务列表 span class token function chkconfig span list 执行结果 mysqld 0 关闭 1 关闭 2
  • linux安装mysql-8.0.19-最全讲解

    linux离线方式安装mysql 8 0 19 下载mysql包 注意 在MySQL Server 8 0 12中 xff0c 压缩算法从Gzip更改为XZ xff1b 并且通用二进制文件的文件扩展名从 tar gz更改为 tar xz 安
  • Windows环境下给oracle打补丁详细教程

    环境检查 1 检查oracle数据库版本 xff0c 安装前检查 xff1a 确保Oracle数据库安装与您正在应用此修补程序的版本相同 C WINDOWS system32 span class token operator gt spa
  • CentOS7安装docker

    安装docker docker官网 xff1a http www docker com docker中文网站 xff1a https www docker com 仓库 Docker Hub官网 https hub docker com 官
  • springCloud---替换注册中心eureka为nacos后 @Value 获取不到值

    在替换为nacos后 xff0c 启动时出现如下错误 xff1a 64 Value 获取不到值 xff0c 无法解析 test 占位符 此时就会进行各种百度 xff0c google xff0c 查文档 xff01 而我遇到的问题出现在 x
  • Linux防火墙及端口策略设置(iptables&firewalld)

    防火墙设置 service firewalld stop service firewalld start service firewall restart service firewalld status 开机禁用 xff1a system
  • windows环境下安装MySQL8.0.19

    安装过程中可能提示缺少xx dll文件 xff0c 建议首先安装微软常用运行库集合 下载地址 1 下载MySQL8压缩包 xff0c 进行解压 xff0c 在根目录下创建data文件夹 xff0c 创建my ini配置文件 2 在配置文件中
  • 解决多个tomcat端口冲突

    我在一台PC机上安装了两个tomcat xff0c 需要同时启动 xff0c 每个tomcat上跑一个程序 xff0c 但是现在提示端口号冲突 xff0c 需要手动更改 需要修改三个地方 xff1a 1 首先 xff1a 在Tomcat的根
  • Android JsonArray移除里面的一个对象

    remove是在 API level 19 时加入的 xff0c 在低版本调用时会出现错误 这里用反射实现了兼容老版本的方法 public void Remove int positon throws Exception if positi
  • libgtk2.0-dev 安装broken packages问题解决方法

    在安装opencv的过程中 xff0c 需要安装到 libgtk2 0 dev xff0c 安装过程中可能会出现broken packages的问题 输出信息如下 xff1a apt get install libgtk2 0 dev Re
  • vue 代码格式化(VS code)

    1 安装了vetur xff08 Vue tooling for VS Code xff09 扩展插件 在扩展中搜索vetur xff0c 然后点击安装 2 直接 xff08 或者 选中你想格式化的代码 xff09 xff0c 右键 xff
  • ViewBinding与Kotlin委托

    接上篇幅 自定义属性委托的用处很多 xff0c 例如组合替代继承 xff0c 给个ViewBinding在Fragment中的使用的例子 xff1a 委托 自定义属性委托 lt p gt lt p gt lt ul gt lt li gt
  • Android之使用Kotlin构建Gradle

    Android StudioGradle3 4 25 1 1 首先kotlin dsl不是什么新鲜的东西了 xff0c Gradle5 0发布的时候就有了 Gradle Kotlin DSL目前的版本是1 0 2 现在是否可以抛弃groov
  • 浅析spring中注解的运行

    为了了解注解的运行机制 xff0c 需要自定义一个注解 xff0c 如下方式来模拟注解方式实现注入对象 xff1a 1 新建一个自定义注解MyResource java span class hljs annotation 64 Reten
  • postgresql双机热备、高可用方案(采用pacemaker+corosync实现)

    PostgreSQL高可用 需求描述 我们有两台centos7的数据库主机A B 要对A B实现双机热备 xff0c A作为数据库master主机 xff0c 对外提供读写服务 xff0c B作为slave主机能实时同步A的数据 当A发生故
  • Java性能调优:使用JMC开启飞行记录器异常

    在高性能的系统服务中 xff0c 性能调优成为了必不可少的一部分 我在发现这个问题的时候是在使用jdk 1 8 版本 xff0c 而在 xff08 jdk 7u4 43 xff09 版本就已支持 通过JMC进行对服务的监控 xff0c 也让
  • 计算二叉树的最大高度 

    二叉树的高度有两种定义 xff1a 从根节点到最深节点的最长路径的节点数 从根到最深节点的最长路径的边数 在这篇文章中 xff0c 我们采用第一种定义 例如 xff0c 下面这棵树的高度是3 xff1a 计算二叉树高度有两种方法 xff0c