当前位置: 首页 > news >正文

二叉树(一)高度与深度

高度:从最底层往上数(后序遍历,左右根),更简单(递归)

深度:从上往下数直到有叶子(前序遍历,根左右),较复杂

高度是最大深度

一、求最大深度

 int maxDepth(TreeNode* root) {//递归的终止条件if(root==NULL)return 0;//单层递归逻辑int leftheight=maxDepth(root->left); //左子树高度int rightHeight=maxDepth(root->right); //右子树高度int height=1+max(leftheight,rightHeight); //该树高度return height;}

二、求最小深度

int minDepth(TreeNode* root) {//递归的终止条件if(root==NULL)return 0;//单层递归逻辑int leftHeight=minDepth(root->left); //左子树的最小深度int rightHeight=minDepth(root->right); //右子树的最小深度if(!root->left&&root->right)//若左子树为空,最小深度是右子树深度+1return 1+rightHeight;if(root->left&&!root->right)//若右子树为空,最小深度是左子树深度+1return 1+leftHeight;return 1+min(leftHeight,rightHeight);//左右子树都有,选择最小深度+1}

三、判断是否为平衡二叉树

平衡二叉树:对每个结点来说,左右子树的高度差<=1

int getHeight(TreeNode* root){//递归终止条件if(root==NULL)return 0;//单层递归逻辑int leftHeight=getHeight(root->left);//左子树高度if(leftHeight==-1)return -1; int rightHeight=getHeight(root->right);//右子树高度if(rightHeight==-1)return -1;//如果做右子树高度差大于1,则返回-1(一直直接向上返回-1),否则就继续算高度int result=abs(leftHeight-rightHeight)>1?-1:1+max(leftHeight,rightHeight);return result;}bool isBalanced(TreeNode* root) {if(getHeight(root)==-1)return 0;return 1;}

四、总结

求高度或深度的题目,如果用递归来做,就是用栈(现进后出的思想),先自上而下“压入”进入递归,然后自下而上依次返回“蹦出”。

1、终止条件:

if(root==NULL)

      return 0;

如果是空节点,说明是相对最底层(叶子之下),高度为0,从这里开始return,逐层返回加1

2、单层递归逻辑:

就是按照左右根的顺序,先求出左子树高度,然后求出右子树高度,再求根树的高度或最小深度或判断其他。

(1)求根树高度:返回1+max(leftHeight, rightHeight)

(2)求最小深度:返回1+min(leftHeight, rightHeight)

        注意要先判断左右子树是否为空的情况!

(3)判断是否平衡:

    比较左右子树的高度差

    不平衡时,一直返回-1(很妙)

    平衡时继续返回根树的高度

http://www.lryc.cn/news/441278.html

相关文章:

  • 梧桐数据库(WuTongDB):MySQL 优化器简介
  • 交通运输部力推高速公路监测,做好结构安全预警,保护人民安全
  • 基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程
  • NEXT.js 创建postgres数据库-关联github项目-连接数据库-在项目初始化数据库的数据
  • Matlab如何配置小波工具(Wavelet Toolbox)
  • FTP、SFTP安装,整合Springboot教程
  • 24年蓝桥杯及攻防世界赛题-MISC-3
  • 阿里云容器服务Kubernetes部署新服务
  • 记录生产环境,通过域名访问的图片展示不全,通过ip+端口的方式访问图片是完整的
  • 网络安全实训八(y0usef靶机渗透实例)
  • QT信号槽原理是什么,如何去使用它?
  • mybatisplus介绍以及使用(上)
  • maxwell 输出消息到 redis
  • infoNCE损失和互信息的关系
  • Java学习路线指南
  • 在SpringCloud中实现服务间链路追踪
  • [数据集][目标检测]红外微小目标无人机直升机飞机飞鸟检测数据集VOC+YOLO格式7559张4类别
  • TS Vue项目中使用TypeScript
  • 打工人、设计师必备的AI抠图工具
  • MyBatis中一对多关系的两种处理方法
  • 视频美颜SDK与直播美颜工具的实现原理与优化方案
  • Linux 安装JDK8和卸载
  • javascript 浏览器打印不同页面设置方向,横向纵向打印
  • Maven 的多种打jar包方式详细介绍、区别及使用教程——附使用命令
  • 计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • Arthas 全攻略:让调试变得简单
  • icpc江西:L. campus(dij最短路)
  • 日志收集工具 Fluentd vs Fluent Bit 的区别
  • PostgreSQL技术内幕11:PostgreSQL事务原理解析-MVCC
  • Java-面向对象编程(基础部分)