创建一颗二叉链表的树 5个域 中序线索化_树的种类

满二叉树

所有节点只有0或者两个节点

4a86ed6e1106e1fbab3c69937688a179.png

完全二叉树

假如该二叉树有n层

前n-1层的节点都排满

最后第n层的所有节点都靠左排列,不一定排满

ff23542fbe2a94c3b59ad817c1a3a802.png

二叉查找树

也叫二叉搜索树

left.val<=parent.val

parent.val<=right.val

平衡二叉树(AVL)

  1. 可以是空树。
  2. 假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1

哈弗曼树

  1. 是一种带权路径长度最短的二叉树,也称为最优二叉树。
  2. 带权路径长度达到最小,就是最优二叉树
  3. 由权值为9,5,2,7的四个叶子节点构造一棵最优二叉树,该树的带权路径长度为:44

c2e2bad4762f65f8ec4736637b5eb881.png

线索二叉树

一个有n个结点的二叉链表。每一个结点有指向左右孩子的两个指针域,一共是2n个指针域。n个结点的二叉树一共同拥有n-1条分支线(根结点无前驱),存在2n-(n-1)=n+1个空指针域

c696a20d27d93b928cf50c0f4a232f5b.png

将指向前驱和后驱的指针称为线索,加上线索的二叉链表则称为线索链表;加上线索的二叉树称为线索二叉树(Threaded Binary Tree)

中序遍历结果:H、D、I、B、J、J、E、A、F、C、G

中序遍历后,将所有的空指针域中的rchild,改为指向它的后继结点。通过指针知道H的后继是D(①),I的后继是B(②),J的后继是E(③),E的后继是A(④),F的后继是C(⑤),G的后继因为不存在而指向NULL(⑥)。此时共有6个空指针域被利用

e0ca64d8325e710122ec60971f843369.png

将这棵二叉树的所有空指针域中的lchild,改为指向当前结点的前驱。H的前驱是NULL(①),I的前驱是D(②),J的前驱是B(③),F的前驱是A(④),G的前驱是C(⑤)。一共5个空指针域被利用,正好和上面的后继加起来是11个

fa29b363d5348eb1957eb400331870dd.png

线索二叉树,等于是把一棵二叉树转变成了一个双向链表,对插入删除结点、查找某个结点都带来了方便。

对二叉树以某种次序遍历使其变为线索二叉树的过程称做是线索化

6619da1ca8c20309306b57364154974e.png
空心箭头实线为前驱,虚线黑箭头为后继

每个结点再增设两个标志域ltag和rtag,ltag和rtag只是存放0或1数字的布尔型变量,占用的内存空间要小于像lchild和rchild的指针变量

026c10ba7dfa5912d94354655b16aebe.png
  • ltag为0时指向该结点的左孩子,为1时指向该结点的前驱
  • rtag为0时指向该结点的右孩子,为1时指向该结点的后继

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值