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

二叉树的基本操作详解

二叉树的类由节点值,左子树和右子树组成

二叉树的基本方法-四种遍历

1.先序遍历 - 根左右 - ABDEHCFG 先序遍历的第一个节点一定是根结点(没有父节点的节点)

2.中序遍历 - 左根右 - DBEHAFCG 中序遍历根节点左边全是左子树中序遍历的结果,根节点的右边一定是右子树中序遍历的结果

3.后序遍历 - 左右根 - DHEBFGCA 后序遍历的最后一个节点一定是根节点

4.层序遍历 -

二叉树遍历的还原(后序+先序 不能还原)

1.后序+中序

1)先找出后序遍历的最后一个节点,该节点是根节点A

2)再把根节点对应到中序遍历结果中, 根节点左边的就是左子树中序遍历的结果DBEH,根节点右边的就是右子树中序遍历的结果FCG

3)把左子树DBEH对应到后序遍历中去,左子树的后序遍历就是DHEB,中序右子树FCG对应的后序右子树遍历就是FGC,再依次类推,B就是左子树的根节点,C就是右子树的根节点

2.先序+中序

1)先找出先序遍历的最前面的一个节点就收根节点A,

2) 再把根节点A对应的中序遍历的结果中,根节点A左边就是左子树中序遍历的结果,根节点右边就是右子树中序遍历的结果,

3)再把中序遍历的左右子树在先序遍历结果里对应,BDEH就是左子树先序遍历的,CFG就是右子树先序遍历的,在以此类推,B就是左子树的根节点,C就是右子树的根节点

总结:

后序/先序 + 中序 可以还原出原始的二叉树

1)根据后序遍历/先序结果,找到根节点

2)根据根节点去中序中查看,区分出谁是左子树,谁是右子树

3) 根据中序,知道了左右子树之后,再去后序中找对应的子树后序结果

方法说明:

size() - 获取树中结点的个数 - 通过递归来完成,递归的初始条件是 root==null 时 return 0 递归公式是1 +size(root.left) + size(root.right) 树的节点个数等于1+左子树的节点个数+右子树的节点个数

getLeafCount(TreeNode root) - 获取叶子节点的个数 - 递归来完成 - 初始条件是空树情况下root==null叶子节点的个数显然为0,当root的左右子树都为空时该节点root就是叶子节点 , 递推公式时 getLeafCount(root.left) + getLeafCount(root.right),一棵树的叶子节点就是左子树和右子树的叶子节点相加

getKLevelCount(TreeNode root , int k) - 获取第k层的叶子节点个数- 初始条件是if(root==null || k<=k)return 0 ,if(k ==1 )return 1 - 递推公式是 一棵树的第k层叶子节点个数==左子树第k-1层+右子树的第k-1层的叶子节点个数

getHeight(TreeNode root) - 获取书的最大高度 - 初始条件root == null return 0 ;root.left == null && root.right == null return1;递推公式1+Math.max(getHeight(root.left) , getHeight(root.right),

find(TreeNode root , int val) - 查找节点 - 也是通过递归来实现的,先判定树为空的情况,返回null,再判定该树的节点值是否等于val ,等于就直接返回,未找到再递归左子树,左子树没有再找右子树

通过递归的方式实现遍历

层序遍历(广度优先搜索 ,没有递归,通过队列来实现)

获取树种结点的个数

获取树中叶子节点的个数

获取第k层叶子节点的个数

获取数的最大高度

查找节点

判断一棵树是不是二叉树

http://www.cnnetsun.cn/news/4227449.html

相关文章:

  • 【RAG实战】LlamaIndex 深度集成:常用 Reader 全解析与自定义 Reader
  • 具身智能中融合TVA时空特征的VLA模型
  • 具身智能TVA-VLA分层规划提升长时序任务成功率
  • 面向具身智能的TVA-VLA增量学习防遗忘机制
  • 中国技术大败局TBL-20260809-048深度解剖报告V2.1 决策迭代版
  • 物理机异常重启怎么排查?定位根因,避免故障反复
  • can总线相关
  • 抖助手第066个开关:隐藏全屏观看的位置、验证方法与入口边界
  • Dify实战-人工输入节点-AI起草人工审批的工作流怎么做
  • 【大模型RAG生成式AI开发实战】《大模型RAG生成式AI开发实战》_114.[第12章 RAG评估体系] 生成评估:BLEU、ROUGE和BERTScore
  • 第10篇-通道架构与Telegram配置
  • Winform/Sunny.UI的DataGridView数据展示、uiPagination分页
  • 转:怎样招到优秀的核心人才
  • 【中国方言题库|15】HarmonyOS ArkTS 本地状态持久化实战:让保存、删除和页面返回后的数据即时一致
  • Raid卡命名及代表含义
  • C++进阶知识5.0
  • 深圳EMC现场测试辐射传导测试
  • scrapy爬取动态页面的正确姿势
  • 基于springboot2+vue2的租房管理系统
  • 基于SpringBoot的大学生竞赛管理系统
  • 交叉效率 DEA 激进型模型计算准确性验证 —— 基于 DEA Performance 的数值验算
  • Codex 多文件协同修改,小心处理依赖冲突与连锁反应
  • 《易学・贲䷕|道影子新解 022》
  • 食品加工技术课程概述
  • 四子棋智能体构建与在线对抗决策应用
  • 飞船乘客状态预测与金融风控建模启发
  • AI Agent 面试题 340:工具调用的成本计量和预算控制机制
  • 董宇辉的尽头是山姆?——个人IP如何转化为零售品牌
  • MyBatis 的注解式开发
  • 【TDengine】 TDengine 的内存管理模型是怎样的?缓存机制如何工作?