二叉树4:二叉树求树高度(超级详细)

2023-05-16

一、思路

什么是树高?
树的高度(或深度)就是树中结点的最大层数。

在这里使用后序遍历的递归算法。

对每一个结点都进行如下操作:

  • 后序遍历其左子树求树高
  • 后序遍历其右子树求树高
  • 对这个结点进行下面操作:
    • 比较其左右子树的高度大小
    • 若左>右,则选择左的高度;反之,选择右的高度
    • 将上一步选出的高度+1,并作为返回值返回

递归算法比较抽象,这里举个例子
在这里插入图片描述
比如上面这个图,按照后序遍历的序列,第1个遍历到的会是①这个结点。
然后,对①进行上面的处理。

  • ①左子树高度为0,右子树高度为0
  • 比较左右子树大小,若左大于右,则选择左。此时,左不大于右,那么选右:0
  • 对0+1,然后将1返回给上一层。即就是,作为结点④其左子树的高度返回上去。

第2个遍历到的是②这个结点:
同样的道理,可以得到②结点会返回给上一层1。

第3个遍历的是④结点:
遍历到④的时候,其左右子树的高度已经由前两步骤得出来了,都是1。
接着,对4进行同样的操作,比较其左右子树的高度。
若左子树高于右子树,就选择左子树的高度,否则选择右子树。
这里左右都是1。那么选右子树的1。
接着,1+1=2。

这个结果就是遍历根节点⑤的左子树所得到的结果。

然后用同样的方式遍历右子树,最后回到根节点。
对根节点的处理方式也相同:
比较左右树的高度,选高的,然后+1返回最终的结果就是树高。

二、代码实现

这个是代码实现,如果看不明白的,上去看看对每个结点处理的方式,和上面举的例子

typedef struct TreeNode{
	int data;//数据域
	TreeNode *RChild;//右孩子指针
	TreeNode *LChild;//左孩子指针
}TreeNode, *BiTree;

int getdepth(TreeNode* node) {
    //1.确定递归函数的返回值和参数:参数-传入根节点 返回值-int
    //2.终止条件:如果为空节点,返回0,表示高度为0
    if (node == NULL) return 0;
    //3.确定单层递归的逻辑
    int leftdepth = getdepth(node->LChild);//递归求左子树高度
    int rightdepth = getdepth(node->RChild);//递归求右子树高度
    //int depth = 1 + max(leftdepth, rightdepth);//树的高度是根到叶子最长路径上的结点的数量
    int depth = 1 + (leftdepth > rightdepth?leftdepth:rightdepth);//这样写和上一行一样
    //所以,每次要找最高的那个子树,所以要使用max函数
    //调用两个递归函数直接可以算出来两个子树的高度,取最高的子树就作为子树高度,再加上根节点高度就行
    return depth;//在这个题目中,我们认为的高度是从根节点到叶子节点最长路径上结点的数量
    //所以,如果这个二叉树只有一个节点,那么这个树的高度就是1
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树4:二叉树求树高度(超级详细) 的相关文章

  • 【Git】解决Ctrl+V无法粘贴文本的问题

    解决Ctrl 43 V无法粘贴文本的问题 问题 xff1a 在我们使用Git Bash将项目克隆至本地时 xff0c 经常需要复制网址 xff0c 但此时却出现问题 xff1a Ctrl 43 V无反应 或是如下图只有 V xff1a 解决
  • 操作系统引导(开机过程)

    操作系统安装在C盘中 xff0c 其一步步启动的过程如下 xff1a 操作系统要启动 xff0c 操作系统的数据需要先被放入主存里 如图所示 xff0c 计算机的主存由RAM和ROM组成 xff0c ROM芯片被集成在电脑主板上 xff0c
  • igh ethercat master及简单介绍

    接触ethercat也有一段时间了 xff0c 做些小总结吧 1 xff0c 关于ethercat ethercat是基于工业以太网的一种总线协议 我接触的igh ethercat master for linux是以用ethercat协议
  • Linux下IGH Ethercat Master安装

    引言 简单igh ethercat master安装 1 xff0c 准备工作 xff08 1 xff09 一个Linux系统 xff0c 在虚拟机里面也可以 xff0c 不过如果在虚拟机里面需要一些其他的设置 xff0c 这个最后再说 L
  • 在树莓派/4.x内核下安装IgH EtherCAT master主站

    树莓派安装ethercat主站 环境 xff1a 4 14 91 rt49 v7 下载源码 xff0c 解压 tar xvf ethercat 1 5 2 tar bz2 cd ethercat 1 5 2 configure enable
  • C语言中static修饰函数和变量用法

    static修饰函数 xff0c 局部变量和全局变量的用法 在c语言中static关键字可以修饰函数和变量 修饰变量又可以分为修饰全局变量和局部变量 static作用是限定变量的生命周期 xff0c 限定变量或函数的作用域 写在前面 xff
  • SOEM控制io超简洁程序

    SOEM控制io超简洁程序 我想用SOEM简单控制io模块 xff0c 因为我的io模块每个出入输出旁边都会有一个小灯 xff0c 所以这也算是点灯程序 xff0c 但是我看了例子并不知道怎么修改 xff0c 都说igh麻烦 xff0c 我
  • Deep Learning 最优化方法之Adam

    本文是Deep Learning 之 最优化方法系列文章的Adam方法 主要参考Deep Learning 一书 整个优化系列文章列表 xff1a Deep Learning 之 最优化方法 Deep Learning 最优化方法之SGD
  • SOEM控制伺服电机

    我只完成了pv模式 xff0c 对于csp模式我不知道是哪里出现了问题 xff0c 有知道的可以在下方评论 这个代码我的pv模式可以正常运行和控制电机 xff0c csp模式可以使能电机 xff0c 但是电机不转 span class to
  • c语言常用的打印/输出函数

    c语言中除了最开始接触的printf 函数 xff0c 还经常遇到其他函数 xff0c sprintf printk fprintf 等 1 xff0c printf 这个函数应该是用的最多的 xff0c 或者是最先接触的 xff0c 至少
  • stm32f103介绍

    完整学习一遍stm32开发板开发 xff0c 并打算坚持一直写笔记 这是第一课 xff0c stm32的介绍 1 什么是STM32 从字面意义来看 xff1a ST xff1a 意法半导体 xff0c 是一个公司的名字 M xff1a Mi
  • 数据结构之单链表操作

    数据结构 xff0c 单链表操作 xff0c 本来应该三年前就应该会的 xff0c 奈何上学的时候呼呼睡大觉 xff0c 最近看代码又接触到了 xff0c 花了几天时间自己重新写了一下 链表操作应该是基础的 xff0c 并且需要会的 xff
  • igh etherlab主站介绍

    一 xff0c 简单介绍 目前用的最多的开源ethercat主站是igh和soem xff0c igh主站功能更多 xff0c 结构较为复杂 xff1b soem功能相对没有那么完善 xff0c 实现更为简单一些 使用场景 xff1a 主站
  • U盘变小恢复方法

    在使用中经常由于使用不当 xff0c 导致u盘空间变小 xff0c 比如像我现在的情况 xff0c 我本来u盘是32G的 xff0c 现在显示只有三个多G xff0c 格式化之后还是这样 解决步骤如下 xff0c 不需要下载工具 1 xff

随机推荐

  • VirtualBox 中运行 CentOS 7 鼠标切换

    在 VirtualBox 中运行 CentOS 7 虚拟机时 xff0c 有时鼠标可能会被捕捉 xff0c 导致无法在虚拟机和主机之间切换 以下是如何在 VirtualBox 中实现与 CentOS 7 鼠标切换的步骤 xff1a 首先 x
  • C++11 生产者消费者模型

    C 43 43 11 生产者消费者模型 线程互斥 lock guard 使用lock guard管理互斥锁 在退出作用域后进行析构时就会自动解锁 xff0c 从而保证了互斥量的正确操作 xff0c 避免忘记 unlock 操作而导致线程死锁
  • PS照片处理尺寸参考表

    参考表 一 讲多少寸 xff0c 是指长边的英寸数 xff0c 比如5 x 3 5就是5寸 讲多少R xff0c 指短边的英寸数 xff0c 比如4R是6 X 4寸 xff0c 而3R就是5寸的5 X 3 5寸 R 的意思的 rectang
  • 数据库习题及答案5

    模拟测验1 一 1 2 3 4 5 6 7 8 9 10 A D C c D A C A A C 一 选择题 xff08 在每个小题四个备选答案中选出一个正确答案 xff0c 填在题末的括号中 xff09 xff08 本大题共10小题 xf
  • Attention Model(mechanism) 的 套路

    最近刷了一些attention相关的paper 照着here的列表 43 自己搜的paper xff0c 网上相关的资料也有很多 xff0c 在此只讲一讲自己对于attention的理解 xff0c 力求做到简洁明了 一 attention
  • springMVC常用注解

    在java框架中 xff0c 使用注解的作用就是注入属性 一 Spring常用注解 64 Component xff1a 标注一个普通的Spring Bean类 64 Controller xff1a 标注一个控制器组件类 64 Servi
  • Ubuntu16.04运行.sh文件

    前言 xff1a 最近在学 Linux内核分析 xff0c 实验做的是哈工大的oslab Linux 0 11 xff0c 然后下载了相应的压缩包 解压之后发现需要运行setup sh文件 xff0c 原先以为是因为没有切换到root命令所
  • 服务器conda,pip命令用不了解决方法

    服务器创建用户后 xff0c 不知道为啥基本命令可以用 xff0c 但是conda xff0c pip等不能使用 xff0c 度娘后一行命令解决 xff0c 命令如下 source span class token operator spa
  • Base64资源

    Base64资源 在线转Base64工具 http www jsons cn img2base64 鲸鱼 maskImage src 61 39 data image png base64 iVBORw0KGgoAAAANSUhEUgAAA
  • Linux驱动开发

    本文为一个简单的字符设备驱动 xff0c 涉及驱动编写 测试程序编写 Makefile编写 驱动加载 卸载 xff0c 运行于Linux虚拟机 xff0c 不涉及底层配置 撰写本文的主要目的为记录一下驱动的开发流程 xff0c 参考了正点原
  • SpringBoot MVC配置

    SpringBoot MVC配置 在使用 SpringBoot 进行实际的项目开发前 xff0c 最后再了解一下 SpringBoot 中对于 MVC 的配置 xff01 仍对应 SpringBoot 03 Web 项目 1 MVC配置简介
  • Python常用的运算符

    1 算术运算符 xff1a 43 xff1a 加法 xff1a 减法 xff1a 乘法 xff1a 除法 xff1a 求两个数的余数 例如 xff1a 10 3 输出为1 xff1a 整除 例如 xff1a 10 3 输出为3 xff1a
  • npm报错 TypeError [ERR_INVALID_ARG_TYPE]: The “path“ argument must be of type string.Received undefine

    npm报错 TypeError ERR INVALID ARG TYPE The path argument must be of type string Received undefined 解决办法 xff1a 1 修改static文件
  • 持之以恒(一)位姿转换:姿态 / 四元数 / 旋转矩阵 / 欧拉角 及 位姿矩阵

    文章目录 1 简介1 1 位姿的几种表示形式1 2 姿态转换在线工具 2 位姿转换接口2 1 旋转向量 转 四元数2 2 四元数 转 旋转向量2 3 四元数 与 旋转矩阵 3 机器人相关应用3 1 不同厂家协作机器人的位姿表示形式 1 简介
  • 在pgsql中利用regexp_matches提取出正则并且用, 分隔开。

    在pgsql中利用regexp matches提取出正则并且用 xff0c 分隔开 span class token keyword SELECT span string agg span class token punctuation s
  • 推荐系统经典论文文献及业界应用

    Survey方面的文章及资料 Adomavicius G Tuzhilin A Toward the next generation of recommender systems A survey of the state of the a
  • TIOBE 编程语言排行,各个语言优缺点,以及你适合那种编程语言

    TIOBE 编程语言排行前10中 xff0c 各个编程语言的优缺点如下 xff1a Python 优点 xff1a 易学易用 xff0c 具有大量的第三方库和工具支持 xff0c 适用于数据分析 人工智能等领域 缺点 xff1a 运行速度相
  • ssh整合

    ssh整合 思路pom依赖几大框架的配置文件配置struts xml测试 思路 SSH是 struts 43 spring 43 hibernate的一个集成框架 1 导入所需要的pom依赖 2 几大框架的配置文件 xff08 web xm
  • JavaFX程序入门

    JavaFX程序入门 一 JavaFX基本概念 JavaFX的图形用户界面 xff08 GUI xff09 通常称为场景图 xff0c 场景图是构建JavaFX应用程序的起点 场景图除了包括布局面板 UI控件 图像 媒体 图表等 xff0c
  • 二叉树4:二叉树求树高度(超级详细)

    一 思路 什么是树高 xff1f 树的高度 或深度 就是树中结点的最大层数 在这里使用后序遍历的递归算法 对每一个结点都进行如下操作 xff1a 后序遍历其左子树求树高后序遍历其右子树求树高对这个结点进行下面操作 xff1a 比较其左右子树