数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历

文章目录

  • 二叉树的存储结构
    • 二叉树的顺序存储
    • 二叉树的链式存储
    • 小结
  • 二叉树的先中后序遍历
    • 例题
    • 小结
  • 二叉树的层次遍历
    • 小结
  • 由遍历序列构造二叉树
    • 一个遍历序列即使给定了前中后序,也不能确定该二叉树的形态
    • 可以确定的序列组合
      • 前序+中序
      • 后序+中序
      • 层序+中序
    • 小结
    • 若前序,后序,层序两两组合能吗?
  • 树的存储结构
    • 总览
    • 树的逻辑结构
    • 顺序存储(双亲表示法)
    • 顺序+链式存储(孩子表示法)
    • 链式存储(孩子兄弟表示法)
    • 森林和二叉树的转换(孩子兄弟表示法)
    • 小结
  • 树和森林的遍历
    • 树的先根遍历
    • 树的后根遍历
    • 树的层次遍历
    • 森林的先序遍历
    • 森林的中序遍历
    • 小结

二叉树的存储结构

二叉树的顺序存储

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第1张图片

i所在的层次可回顾上面二叉树的性质
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第2张图片

通过计算出节点对应左孩子或右孩子的节点数然后判断是否在n个节点的范围内
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第3张图片
当非完全二叉树时不适用了,如下图,节点与编号不对应了

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第4张图片

所以,还是按照原来的对应图来存储。判断节点存不存在通过判断是否空的布尔值即可
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第5张图片
弊端:会浪费部分节点
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第6张图片

二叉树的链式存储

n个节点肯定会有n-1个指针域不为空,n+1个指针域为空。
n-1是有n-1条线连接两个节点,所以对应的指针域中也会有n-1个不为空的指针域
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第7张图片
常用的操作
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第8张图片
寻找某个节点的父节点时,需要遍历整个数,依次判断是否某个节点的子节点为对应的节点。
此时节点结构体中加上父节点指针可以避免遍历

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第9张图片

小结

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第10张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第11张图片

二叉树的先中后序遍历

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第12张图片

感觉先中后序主要是根的遍历位置在前中后

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第13张图片

有点递归的思想在里面
先找到根,然后开始按对应的序遍历,如果左右中存在不是叶子节点,则将该节点当作根节点继续按对应的序来遍历

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第14张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第15张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第16张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第17张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第18张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第19张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第20张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第21张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第22张图片

例题

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第23张图片

小结

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第24张图片

二叉树的层次遍历

核心:队列非空则头节点出队并访问该节点且将其左,右孩子插入队尾(判断是否有,有的话则插入)
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第25张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第26张图片

小结

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第27张图片

由遍历序列构造二叉树

一个遍历序列即使给定了前中后序,也不能确定该二叉树的形态

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第28张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第29张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第30张图片

可以确定的序列组合

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第31张图片

前序+中序

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第32张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第33张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第34张图片

后序+中序

都是先判断根结点
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第35张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第36张图片

层序+中序

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第37张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第38张图片

小结

核心:找根节点
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第39张图片

若前序,后序,层序两两组合能吗?

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第40张图片
无法确定,一定要有中序才行

树的存储结构

总览

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第41张图片

树的逻辑结构

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第42张图片

顺序存储(双亲表示法)

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第43张图片
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第44张图片

顺序+链式存储(孩子表示法)

存在指向孩子链表的指针的元素
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第45张图片

链式存储(孩子兄弟表示法)

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第46张图片
左孩子都是原本的孩子节点,右孩子都是原本的兄弟节点
所以B的右孩子的遍历下去的所有右孩子为原来A节点的孩子
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第47张图片

森林和二叉树的转换(孩子兄弟表示法)

把兄弟节点都连起来,然后把兄弟节点与父节点的连线断了就成了
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第48张图片

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第49张图片

小结

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第50张图片

树和森林的遍历

树的先根遍历

类似二叉树的先序遍历 根 左 右
对应的二叉树即对应的孩子兄弟法表示的树且该二叉树的先序遍历与原树的先根遍历相同
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第51张图片

树的后根遍历

类似二叉树的后序遍历 左 右 根
对应的二叉树即对应的孩子兄弟法表示的树且该二叉树的中序遍历与原树的后根遍历相同
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第52张图片

树的层次遍历

后根和先根遍历为深度优先遍历
层次遍历为广度优先遍历
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第53张图片

森林的先序遍历

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第54张图片
或把森林先转化为二叉树
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第55张图片

森林的中序遍历

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第56张图片
或转换为二叉树
数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第57张图片

小结

数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历_第58张图片

你可能感兴趣的:(王道数据结构和算法考研笔记,算法,数据结构)