数据结构之树与二叉树(二叉排序树、平衡二叉树、哈夫曼树)

在这里插入图片描述

一、树

1、树的定义
树:n个节点的有限集。n=0时为空树。
(1)有且仅有一个根节点,根结点没有前驱;
(2)当n>1时,其余节点可分为m个互不相交的有限集,其中每个集合本身又是一棵树,称为根的子树。
2、树的基本术语
在这里插入图片描述
(1)祖先:根A到结点K的唯一路径上的任意结点,称为K的祖先。
(2)结点的度:树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。
(3)分支结点:度大于0的结点称为分支结点。
(4)结点的深度:从根节点开始自顶向下逐层累加的;
结点的高度:从叶结点开始自底向上逐层累加的;
树的高度:树中结点的最大层数。
(5)有序树和无序树:树中结点的各子树从左到右是有次序的,不能互换,称为有序树,反之为无序树。
(6)路径和路径长度:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的,路径长度是路径上经过的边的个数。
(7)森林:是m课互不相交的树的集合。
3、树的性质
在这里插入图片描述

二、二叉树

1、二叉树的定义和特征
(1)二叉树:每个结点至多有两课子树,并且二叉树的子树有左右之分,次序不能颠倒。
在这里插入图片描述
(2)二叉树与度为2的有序树的区别:
a:度为2的树至少有3个结点,而二叉树可以为空;
b:度为2的有序树的孩子的左右次序是相对于另一个孩子而言的,若只有一个孩子,则这个孩子就不用区分左右次序,而二叉树无论其孩子数是否为2,都需要确定左右次序。

2、特殊的二叉树
(1)满二叉树
在这里插入图片描述
(2)完全二叉树:高为h的二叉树,每个结点都与高度为h的满二叉树中编号为1-n的结点一一对应。
在这里插入图片描述
在这里插入图片描述
(3)二叉排序树:左子树上所有结点的关键字均小于根结点的关键字,右子树上的所有结点的关键字均大于根结点的关键字。
(4)平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。

3、二叉树的性质
在这里插入图片描述
4、二叉树的存储结构
(1)顺序存储结构
根据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,结点的序号可以唯一反映结点之间的逻辑关系,可以最大可能的节省存储空间。

(2)链式存储结构
在这里插入图片描述

三、二叉树的遍历

1、递归的遍历:

(1)先序遍历
在这里插入图片描述
(2)中序遍历
在这里插入图片描述
(3)后序遍历
在这里插入图片描述
2、非递归遍历:

(1)先序遍历
在这里插入图片描述
在这里插入图片描述
(2)中序遍历
在这里插入图片描述
(3)后序遍历
在这里插入图片描述
在这里插入图片描述
3、层次遍历
在这里插入图片描述
4、由遍历构造二叉树
(1)由二叉树的先序遍历和中序遍历可唯一确定一棵二叉树。
(2)由二叉树的中序遍历和后序遍历可唯一确定一棵二叉树。

四、线索二叉树

1、线索二叉树
规定:若无左子树,令lchild指向其前驱结点;若无右子树,令rchild指向其后继结点。指向结点前驱和后继的指针称为线索。
在这里插入图片描述
2、中序线索二叉树的构造
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、中序线索二叉树的遍历
在这里插入图片描述
在这里插入图片描述
4、先序线索二叉树和后序线索二叉树
在这里插入图片描述

五、树和森林

1、树的存储结构
(1)双亲表示法:采用一组连续存储空间来存储每个结点。可以很快的找到双亲结点,但求结点的孩子需要遍历整个结构。
在这里插入图片描述
(2)孩子表示法:将每个结点的孩子结点都用单链表接起来形成一个线性结构。这种方式寻找子女较快,但寻找双亲需要遍历N个孩子结点中孩子链表指针所指向的N个孩子链表。
在这里插入图片描述
(3)孩子兄弟表示法:二叉树表示法,以二叉链表作为树的存储结构。左孩子右兄弟。
在这里插入图片描述
2、树、森林和二叉树的转换
(1)树转二叉树:结点的左指针指向它的第一个孩子,右指针指向它的右兄弟,称为“左孩子右兄弟”。
在这里插入图片描述
(2)森林转二叉树:将森林中的每课树转换成相应的二叉树;每棵树的根结点视为兄弟结点,每棵树根之间加一根连线。
在这里插入图片描述
(3)二叉树转树:若某结点的左孩子结点存在,将左孩子结点的所有右孩子结点都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来;删除原二叉树中所有结点与其右孩子结点的连线。
在这里插入图片描述
(4)二叉树转森林:先把每个结点与右孩子结点的连线删除,得到分离的二叉树;把分离后的每棵二叉树转换为树。

3、树和森林的遍历
(1)先序遍历:

六、树和二叉树的应用

1、二叉排序树
(1)二叉排序树的定义
在这里插入图片描述
在这里插入图片描述
(2)二叉排序树的查找
在这里插入图片描述
(3)二叉排序树的插入

在这里插入图片描述
在这里插入图片描述
(4)二叉排序树的构造
在这里插入图片描述
在这里插入图片描述
(5)二叉排序树的删除
分为三种情况:
在这里插入图片描述
在这里插入图片描述
(6)查找效率分析
在这里插入图片描述

  • 查找成功的平均查找长度:ASL成功=(1+22+34+4*3)/10=2.9
  • 查找失败的平均查找长度:ASL失败=(35+46)/11=17.2

2、平衡二叉树
(1)平衡二叉树的定义:任意结点的左右子树高度差的绝对值不超过1。结点的平衡因子只能是-1,0,1。
在这里插入图片描述
(2)平衡二叉树的插入
基本思想:每当再二叉排序树中插入或删除一个结点时,首先检查其插入路径上的结点是否因此操作导致不平衡。若不平衡需要进行调整,调整分为四种情况:

  • LL平衡旋转:右单旋转,在结点A的左孩子的左子树上插入了新结点,导致了A为根结点的子树失去平衡,需要一次向右的旋转操作。
    在这里插入图片描述
  • RR平衡旋转:左单旋转,在结点A的右孩子的右子树上插入了新结点,导致了A为根结点的子树失去平衡,需要一次向左的旋转操作。
    在这里插入图片描述
  • LR平衡旋转:先左后右双旋转,在结点A的左孩子的右子树上插入了新结点,导致了A为根结点的子树失去平衡,需要两次旋转操作,先左旋转再右旋转。
    在这里插入图片描述
  • RL平衡旋转:先右后左双旋转,在结点A的右孩子的左子树上插入了新结点,导致了A为根结点的子树失去平衡,需要两次旋转操作,先右旋转再左旋转。
    在这里插入图片描述
    (3)平衡二叉树的查找:与二叉排序树的查找过程相同。

3、哈夫曼树和哈夫曼编码
(1)哈夫曼树
带权路径长度:从书的根结点到任意结点的路径长度与该结点上权值的乘积。
在这里插入图片描述
哈夫曼树:在含有N个带权叶结点的二叉树中,其中带权路径长度最小的二叉树称为哈夫曼树。
在这里插入图片描述
其中,c 的带权路径长度最小,为哈夫曼树。
(2)哈夫曼树的构造
在这里插入图片描述

  • 将n个结点分别作为n 棵仅含一个结点的二叉树,构成森林F;
  • 构造一个新结点,从F中选择两棵根节点权值最小的树作为新结点的左右子树,并且新结点的权值等于左右子树上根结点的权值之和;
  • 从F中删除刚才选出的两棵树,将新得到的树加入F中;
  • 继续构造,直至F中只剩下一棵树为止。

(3)哈夫曼编码
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值