数据结构之树2

二叉树储存结构

顺序结构

当你的树是完全二叉树时
在这里插入图片描述
几个基本操作
在这里插入图片描述
当你的二叉树不是完全二叉树时
因为要完成树的基本操作,你只能在对应空间储存
而且此时对应是否有自子节点
还要根据isEmpty来判断对应
节点
这样的空间利用率还低
在这里插入图片描述
所以树的顺序一般来说是不太实用的
只适用于完全二叉树
所以我们重点看书的链式储存

树的链式储存

n个节点
n-1个节点上面有指针指向
一共是2n个指针域
所以有n+1个空指针域
在这里插入图片描述
简单看下二叉树的初始化和插入新节点
在这里插入图片描述
其他定义方法
看情况
考研一般考不加父节点的
在这里插入图片描述

二叉树的先后中序遍历法

先序,中序和后序
对应的是节点的先中后
左一定在右后面
先序:根左右
中序:左根右
后序:左右根
在这里插入图片描述

先中后序
遍历一些例子
在这里插入图片描述

先序遍历的伪代码

在这里插入图片描述

可以推一下奥
中序
和后序都差不多

在这里插入图片描述

在这里插入图片描述

演示递归过程
在这里插入图片描述

现在栈顶的T=NULL
弹出栈
到前一个栈
前一个栈运行到126行
现在运行127行
就是D->G
访问G
124然后G!=NULL125访问G
然后到126没左NULL返回
G的栈
然后127也是NULL
返回G的栈
然后G的栈运行完了
弹出
其他都差不多是这样的过程

在这里插入图片描述

应用
访问树的深度
也是递归哦
在这里插入图片描述

二叉树的层次遍历

算法思想
1.借助一个辅助队列实现
2.入根节点,然后先入队其左节点后入队其右节点
3.后面的都相同循环出一个节点的同时入队其左节点和右节点
直至队列没有元素
在这里插入图片描述
在这里插入图片描述
代码实现
在这里插入图片描述

遍历序列构造二叉树

三序遍历的缺点
就是一个树对应一种遍历序列
但是
一个中序(或者前序或者后序)遍历不能确定唯一的二叉树
如图他们的三种二叉树的中序遍历法都相同
但是树不同

在这里插入图片描述
所以我们确定唯一的一棵树
需要前序,中序,后序
中的至少二个
才能确定

在这里插入图片描述

1.前序+中序

在这里插入图片描述
在这里插入图片描述

先通过前序遍历ADBCE
找到对应的跟节点A
然后再在中序遍历里找对应跟节点
是第四个
说明左子树有三个节点
右子树有一个节点
然后对左子树再次加以上面的判断直至其左右子树节点都为1/0

在这里插入图片描述
这个栗子
单靠中序遍历不知道CHG是左子树的还是CH是左子树的(不知道对应字数的个数)
所以考中序,B左边两个元素
知道左右字数各两个
还可以知道对应i是左子树还是右子树
因为前序遍历只有两个元素的话
GI
只能知道G为根节点,I是左子树节点还是右子树节点不知道
还需要依靠另一种遍历方法
中序遍历是GI这样排的,正好根据前面知道G为根节点
然后I就是右子树的节点呗

后序+中序

在这里插入图片描述
和上面差不多
可以去看视频

层次+中序

在这里插入图片描述
推一下

层序第一个出现的肯定是根节点
D
在中序中找D
在这里插入图片描述
D左边EAF右边HCBGI
然后再回到层序遍历
A和B
所以A是左子树的根节点
B是右子树的根节点
然后EF根据中序/层次(都可以)遍历就知道EF分别是A左右节点喽
然后看中序B是左边两个节点右边两个节点
说明B一定是二叉树
再根据层次遍历H为c节点,I为G节点
再看中序遍历知道H为C左节点,I为G右节点

再看个怪异例子
在这里插入图片描述

注意其他的两两组合

在这里插入图片描述
不能实现构造唯一二叉树的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小袁拒绝摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值