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

5.3.1_1二叉树的先中后序遍历

知识总览:

什么是遍历:

按照某种次序把所有节点都访问一遍

 

 二叉树的遍历-分支节点逐层展开法(会这个就行):

先序(根)遍历:根左右   中序(根)遍历:左根右     后序(根)遍历:左右根

分支节点逐层展开法:先把节点按照先中后遍历顺序写上,再依次对非叶子节点进行展开

如下第5张图:先序遍历

1.按照根左右遍历顺序为A      B     C

2.B、C为非叶子节点,把B、C按照先序遍历再展开即B->B作为根是BDE,C作为根展开为CF,则目前序列为ABDECF

3.再看D、E、F是否为叶子节点,不是叶子节点的再次展开,即把D节点展开即D作为根是DG即序列为ABDGECF

代码: 

先序遍历代码

在根节点不为空的情况下,根据根左右的顺序,依次访问根节点,递归访问左子树、右子树节点

如下第二张图:先访问根节点即T=A,然后A不为空则visit(A)访问A,函数调用栈记录当前执行方法的相关信息如参数和执行行数,然后PreOrder递归访问A的左子树B,即T=B,B不为空访问B,然后再递归访问B的左子树即T=D,D不为空访问D再递归访问D的左子树,此时D的左子树为空则在下一轮循环中直接退出,即在函数调用栈中在T=NULL后然后马上弹出栈,即在T=NULL这一轮中执行到了126行,先把这一轮方法执行完,即弹出后即PreOrder(T->lchild)执行完后继续执行127行代码即PreOrder(T->rchild)开始PreOrder执行D的右子树即T=G每调用一次函数就压一次栈,即T=D时调用PreOrder(T->rchild)127行代码,然后G不为空访问G,T=G时再执行PreOrder(T->lchild)126行代码,再压栈一次,此时T=G的左子树=NULL,此时T=null弹出栈,现在执行到T=G的126行代码,再执行T=G的127行代码即执行T=G的右子树=NULL,则T==NULL弹出,此时T=G执行完弹出,然后执行T=D 127行代码已经执行结束,则弹出,则到T==B 126行代码该执行T==B 127行代码,即T==B的右子树=E,然后E不为空访问E,执行T==E 126行代码压栈,此时T== E的左子树==NUll为空弹出,则该执行T==E 127行代码压栈,此时T== E的右子树==NUll为空弹出,则到T==E 127行代码此时该轮函数执行完弹出,则函数调用栈中剩余T==A 126行代码则该执行T==A 127行代码,即T==A的右子树=C,C不为空访问C,执行T==C 126行代码压栈,即T==C的左子树==F,F不为空访问F执行T==F 126行代码压栈,即T==F的左子树==Null为空栈弹出,然后函数调用栈顶部为T==F 126行代码,则该执行T==F 127行代码即压栈,T==F的右子树==NUll为空栈弹出,则此时调用栈中T==F 127行代码整个方法执行结束栈弹出,调用栈剩T==C 126行代码则该执行T==C 127行代码压栈,即T==C的右子树==NULL则为空栈弹出,剩余T==C 127行即该轮执行结束弹出,调用栈剩T==A 127行代码即该轮执行结束弹出,即函数调用栈为空执行结束

中序遍历代码

在根节点不为空的情况下,根据左根右顺序,递归访问左子树,访问根节点,递归访问右子树节点

后序遍历代码 

在根节点不为空的情况下,根据左右根顺序,递归访问左子树、右子树,再访问根节点

求树的深度-应用

可以先序遍历左子树深度,再先序遍历右子树深度,然后求这俩的最大深度再加1即为树的深度

 

知识回顾:

 

。。。。。。。。。。。。 

 

http://www.xdnf.cn/news/10726.html

相关文章:

  • 操作系统学习(十一)——磁盘
  • 【agent开发】部署LLM(一)
  • 内容中台的实施基石是什么?
  • 简道云--第一个表单
  • 普中STM32F103ZET6开发攻略(二)
  • 人工智能工程技术专业 和 其他信息技术专业 有哪些关联性?
  • window/linux ollama部署模型
  • docker使用sh脚本创建容器,保持容器正常运行,异常关闭后马上重启
  • 【Unity】云渲染
  • 第1章:走进Golang
  • 《类和对象--继承》
  • JavaScript中的常量值与引用值:从基础到实践
  • Vue-Leaflet地图组件开发(二)地图核心功能实现
  • ck-editor5的研究 (6):进一步优化页面刷新时,保存提示的逻辑
  • 5.29 自学测试 Linux基础 Day4
  • webfuture:提示“Strict-Transport-Security头未设置”漏洞的解决方法
  • 深度学习pycharm debug
  • Cesium 自带的标注碰撞检测实现标注避让
  • esp32关于PWM最清晰的解释
  • 渊龙靶场-sql注入(数字型注入)
  • 快乐大冒险:解锁身体里的 “快乐密码”
  • 力扣刷题Day 68:搜索插入位置(35)
  • 如何在 Windows 11 24H2 的任务栏时钟中显示秒数
  • js的时间循环的讲解
  • 100V离线语音通断器
  • java笔记08
  • 15-2021剑侠情缘2-各种修复完善+虚拟机单机端+外网服务端整理+文本教程+视频教程
  • Linux服务器安装GUI界面工具
  • 【数据集】NCAR CESM Global Bias-Corrected CMIP5 Output to Support WRF/MPAS Research
  • Redis部署架构详解:原理、场景与最佳实践