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

链式二叉树的基本操作——遍历

本文笔者将带领读者一起学习链式二叉树的一些基本语法,至于更难一些的插入删除等,笔者将在后续C++更新后再次详细带领大家学习。

首先,在进行二叉树之前,我们需要一颗二叉树,而二叉树的初始化现阶段实现不太现实,故笔者在此处手动建一个二叉树:由于现在不是堆了,所以用数组显然是不行,这时候我们直接用链表存储即可,也就是链式二叉树:

如上图,首先初始化了一个节点,然后两个指针分别指向左子树和右子树,然后手动赋值即可,最终的二叉树长这样:

        1
       / \
      2   4
     /   / \
    3   5   6
         \
          7

下面我们只对这个二叉树进行讨论,首先进行遍历,二叉树的遍历有三次,分别是:前序遍历,中序遍历,后序遍历。

前序遍历:根节点,左子树,右子树。由于三种遍历方式本质一样,笔者在此着重讲一下第一种遍历方式。首先,根据这棵树,我们可以借用递归的思想,不过这里有一个易错点,那就是左(右)子树是空节点时仍然存在这种情况,这里笔者记作N,一定不能忽略这种情况,比如笔者创建的这棵树,如果按照前序遍历,那就是1 (2 (3 N N) N)( 4 (5 N (7 N N))( 6 N N))不难理解,这其实是一种递归的思想,不断推进,直到遇到了N(空结点),剩下情况一直保证先根在左最后右,这是逻辑角度,下面从代码的角度来分析:

这就是一个前序遍历的代码实现,其实不难理解,这就是用了递归思想,函数栈帧的知识,因为本质上就是栈帧的调用,在具体进行时,首先需要让左子树处理完,在这之后才能进行右子树,每个二叉树都是如此进行,具体可以看下图:

左图有些问题,不过无伤大雅,思路就是如此,最后再main函数调用一下即可:

中序遍历:左子树,根节点,右子树

        1
       /  \
      2   4
     /    /    \
    3   5   6
          \
           7

中序遍历和前序遍历的情况基本一致,并无不同,中序遍历结果:((N 3 N) 2  N )1 ((N  5 (N 7 N )))4  (N 6 N))

代码自然也是类似的:

这里不作过多解释,相信读者都能理解。

后序遍历:左子树,右子树,根节点

N N 3 N 2 N N 7 N 5 N N 6 4 1
下面直接看代码:

到这里,三种遍历方式其实已经结束,最后,笔者给大家看一下打印的结果: 

ok,到这里笔者就结束了,笔者把源码放在GitHub上了,希望大家给一个星星:

https://github.com/z-yi-han/Fundamentals-of-Data-Struct/tree/main/Tree

笔者还会持续更新,希望大家支持,非常感谢各位读者


 

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

相关文章:

  • 【论文笔记】Multi-Agent Based Character Simulation for Story Writing
  • 同创物流学习记录2·电车
  • 聊聊智慧这个东西之三:从食物的毒性、偏性聊起
  • 探秘gRPC——gRPC原理详解
  • [优选算法专题二滑动窗口——最大连续1的个数 III]
  • implement libwhich for Windows
  • Azure AI Search 探索总结
  • 软考 系统架构设计师系列知识点之杂项集萃(124)
  • [Responsive theme color] 动态主题 | 色彩工具函数 | HEX与RGB
  • OpenStack Neutron中的L2 Agent与L3 Agent:新手友好指南
  • SpringSecurity(一)入门
  • DAY12DAY13-新世纪DL(Deeplearning/深度学习)战士:破(改善神经网络)1
  • tree组件(几种不同分叉树Vue3)
  • ubuntu网络共享
  • JetPack系列教程(七):Palette——让你的APP色彩“飞”起来!
  • NLP:Transformer模型构建
  • 【遥感图像技术系列】遥感图像风格迁移的研究进展一览
  • Win10快速安装.NET3.5
  • 排列与组合
  • React单元测试
  • 云安全 - The Big IAM Challenge
  • XSS攻击:从原理入门到实战精通详解
  • JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
  • 深入解析C++ STL链表(List)模拟实现
  • 如何得知是Counter.razor通过HTTP回调处理的还是WASM处理的,怎么检测?
  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • qt vs2019编译QXlsx
  • Qt QDateTime时间部分显示为全0,QTime赋值后显示无效问题【已解决】
  • ML307C 4G通信板:工业级DTU固件,多协议支持,智能配置管理
  • 随机整数列表处理:偶数索引降序排序