【数据结构——树和二叉树】

树和二叉树

树的定义和基本术语

树是一种递归定义的数据结构

有序树——逻辑上看,树中结点的各子树从左至右是有次序的,不能互换
无序树——逻辑上看,树中结点的各子树从左至右是无次序的。可以互换

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

有次序还是无次序是具体看你用树来存什么,是否需要用结点的左右位置来反映某些逻辑关系

森林:森林是m(m>=0)棵互不相交的树的集合

二叉树的定义和基本术语

二叉树的顺序结构,只适合存储完全二叉树

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

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

在这里插入图片描述

  • 完全二叉树的常考性质

在这里插入图片描述

在这里插入图片描述

  • 二叉树的存储方式

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

在这里插入图片描述

二叉树的先中后遍历

先序遍历:根左右
中序遍历:左根右
后序遍历:左右根
先中后遍历其实就是看根的位置

先序:第一次路过时访问,中序:第二次路过时访问,后序:第三次路过时访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二叉树的层序遍历

在这里插入图片描述

在这里插入图片描述

由遍历序列构造二叉树

一个中序的遍历序列可能构造成多种不同的二叉树形态,给定一个二叉树,他的中序二叉树遍历的次序时唯一的,但是给定一个中序遍历的序列,给定二叉树的形态时不唯一的

在这里插入图片描述

前序遍历,中序遍历,后序遍历都拥有相同的结论

结论:若只给出一棵二叉树的前/中/后/层序遍历序列的一种,都是不能唯一确定一棵树

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

前序+中序遍历序列
后序+中序遍历序列
层序+中序遍历序列

在这里插入图片描述
如果拥有这两种序列就可以确定二叉树的形态,但是必须拥有中序遍历,因为在进行遍历的时候,前序和后序遍历顺序可能相同,无法确定

二叉树的线索化

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

在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

在这里插入图片描述

易错点:最后一个结点的rchild rtag 的处理还有先序线索化中,注意处理爱的魔力转圈圈的问题,当ltag==0时,才能对左子树进行先序线索化

树的存储结构

树是一种由递归定义的数据结构

  • 双亲表示法:顺序存储结点数据,结点中保存父结点在数组中的下标,优点:找父结点方便;缺点:找孩子不方便
  • 孩子表示法:顺序存储结点数据,结点中保存孩子的链表头指针(顺序+链式存储),优点:找孩子方便;缺点:找父结点不方便
  • 孩子兄弟表示法:用二叉链表存储树——左孩子右兄弟,孩子兄弟表示法存储的树,从存储视角来看形态和二叉树类似,考点就是树与二叉树的相互转换,本质就是用孩子兄弟表示法存储树
  • 森林与二叉树的转换:本质就是用二叉链表来存储森林——左孩子右兄弟,森林中各个树的根结点之间视为兄弟关系
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

树和森林的遍历

在这里插入图片描述

  1. 树的先根遍历

先根遍历:若树非空,先访问根结点,再依次对每一棵子树进行先根遍历

在这里插入图片描述

  1. 树的后根遍历(优先深度遍历)

在这里插入图片描述

  1. 树的层次遍历(优先广度遍历)

在这里插入图片描述

  1. 森林的先序遍历

在这里插入图片描述

  1. 森林的中序遍历

在这里插入图片描述

森林二叉树
先根遍历先序遍历先序遍历
后根遍历中序遍历中序遍历
二叉排序树

二叉排序树,又称二叉查找树,一棵二叉树或者空二叉树,或者是具有下列性质的树,左子树所有的结点关键字均小于根结点的关键字,右子树所有的结点的关键字均大于根结点的关键字,左子树和右子树又是一棵二叉排序树

进行中序遍历的时候就能够得到一个递增的有序序列

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

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

在这里插入图片描述

平衡二叉树

平衡二叉树,又称为平衡树,(AVL树),树上任一结点的左子树和右子树的高度差不超过1

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

哈夫曼树

可变长度编码:允许对不同字符用不等长的二进制表示

固定长度编码:每个字符用相等长度的二进制表示

若没有一个编码时另一个编码的前缀,则称这样的编码为前缀编码

有哈夫曼树得到的哈夫曼编码——字符集中的每一个字符作为一个叶子结点,各个字符出现的频度作为结点的权值,根据之前的方法来构造哈夫曼树,哈夫曼树可以用于是数据压缩(注意这里的字符只可以作为叶子结点)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值