树和二叉树

——————/24树和二叉树
非线性结构:至少存在一个数据元素有不止一个直接前驱或后继
树:递归定义
树的结点、结点的度(度为0的结点称叶结点)、树的度、树的深度、森林(互不相交树的集合,树与森林很容易转化)
无序树(孩子无先后左右之分,仅为互不相交子集而已)、有序树

无序树研究不方便
二叉树:结点数为0或最多只有左右两棵子树
二叉树子树有左右之分,不能颠倒
二叉树与度为2的树区别:二叉树为有序树
——性质
二叉树中,度为0与度为2的结点数关系n0=n2+1
——满二叉树
满二叉树定义:深度为k,且有2^k-1个结点的二叉树
完全二叉树定义:每个结点编号与相同深度满二叉树完全对应

完全:叶结点只可能出现在层次最大或次最大的两层上
满二叉树一定是完全二叉树,反之不成立
结点数为n的完全二叉树,其深度为└log2n┘+ 1
——————/26
性质5:在按层序编号的n个结点的完全二叉树中,任意一结点i(1≤i≤n)有:
⑴ i=1时,结点i是树的根;否则(i>1),结点i的双亲为结点└i/2┘
⑵ 2i>n时,结点i无左孩子,为叶结点;否则结点i的左孩子为结点2i
⑶ 2i+1>n时,结点i无右孩子;否则结点i的右孩子为结点2i+1
将完全二叉树编号存为数组,可据性质5找到任一结点双亲孩子
——/
完全二叉树顺序存储结构


中序:a+b×c-d-e/f
后序:abcd-×+ef /-
先序:-+a×b-cd /ef
递归通过栈实现,故所有递归算法均可通过栈改写为非递归算法
——————/28线索二叉树
n个结点有2n个链域,其中n+1个空链域,n-1个指针域
线索二叉树即利用n+1个空链域来存放结点的前驱和后继信息
增加ltag和rtag两个标志域:

访问次序axb-c
通过头结点将线索化二叉树形成一封闭环
头结点即是第一个访问结点的前驱,又是最后一个访问结点的后继
——————/29
有了线索二叉树,就容易遍历二叉树了:
①先找要遍历的第一个结点
②依次找该结点的后继
③重复②直到其后继为头结点
所有问题归为如何在线索二叉树中找结点后继?

遍历中序线索二叉树:对任意结点p,若rtag=1,则rchild指向该结点后继;若rtag=0,则rchild指向该结点右孩子,此时应从右孩子开始,沿左指针前进,直到找到没有左孩子的结点s(ltag=1),则s就是p的后继,即后继是中序遍历右子树时,访问的第一个结点
遍历后序线索二叉树
遍历前序线索二叉树
——————/30树和森林
树的存储结构
①双亲表示法:用一地址连续存储单元来存放树的结点,每结点有data、parent俩域

——————/31
给定一棵树,用二叉链表存储,可唯一对应一棵二叉树,反之亦然

——/二叉树转换为森林

路径、路径长度、树的路径长度
——/
完全二叉树是路径长度最短(结点总数一定)的二叉树
考虑带权时:设树有m个叶结点,每个叶结点带一权值wi且根到叶结点i路径长度为 Li (i=1,2...m),则树带权路径长度为树中所有叶结点权值与路径长度乘积的总和:
即:WPL=∑wi*li
——/
使WPL最小的二叉树为最优二叉树(Huffman 树)

HT不唯一性,可能出现在:
(1)构造新树时,左右孩子未作规定
(2)当有多个结点权值相同,选择谁未作规定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值