数据结构——第三章树和二叉树:01树和二叉树的类型定义

1.树的类型定义:

(1)数据对象D:D是具有相同特性的数据元素的集合。

(2)数据关系R:若D为空集,则成为空树。

否则:在D中存在唯一的称为根的数据元素root。当n>1时,其余结点可分为n(n>0)个互不相交的有限集T1, T2, T3, ..., Tm,其中每一棵子集本身又是一课符合本定义的树,称为根root的子树。

2.树的基本操作:

(1)查找类:

①Root(T)——求树的根结点

②Value(T, cur_elem)——求当前结点的元素值

③Parent(T, cur_elem)——求当前结点的双亲结点

④LeftChile(T, cur_elem)——求当前结点的最左孩子

⑤RightSibling(T, cur_elem)——求当前结点的右兄弟

⑥TreeEmpty(T)——判定树是否为空树

⑦TreeDepth(T)——求树的深度

⑧TraverseTree(T, Visit())——遍历树

(2)插入类:

①InitTree(&T)——初始化树

②CreateTree(&T, definition)——按定义构造树

③Assign(&T, cur_elem, value)——给当前结点赋值

④InsertChild(&T, &p, i, root)——将以root为根的树插入为结点p的第i棵子树

(3)删除类:

①ClearTree(&T):将树清空

②DestroyTree(&T):销毁树的结构

③DeleteChile(&T, &p, i):删除结点p的第i棵子树

3.有向树:有确定的根,树根和子树根之间为有向关系。

4.有序树:子树之间存在确定的次序关系。

5.无序树:子树之间不存在确定的次序关系。

6.线性结构对比树形结构:

(1)线性结构:第一个元素无前驱,最后一个元素无后继,其它元素一个前驱一个后继。

(2)树形结构:根结点无前驱,多个叶子结点无后继,其它元素一个前驱多个后继。

7.二叉树的类型定义:二叉树或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

8.二叉树有五种基本形态:空树、只含根结点、右子树为空、左子树为空、左右子树均不空。

9.二叉树的主要基本操作:

(1)查找类:

①Root(T)——查找二叉树根

②Value(T, elem)——按值查找结点

③Parent(T, elem)——查找结点双亲

④LeftChild(T, elem)/RightChile(T, elem)——查找结点左孩子/查找结点右孩子

⑤LeftSibling(T, e)/RightSibling(T, elem)——查找结点左兄弟/查找结点右孩子

⑥BiTreeEmpty(T)——判断二叉树是否为空

⑦BiTreeDepth(T)——求二叉树深度

⑧PreOrderTraverse(T)——先序遍历二叉树

⑨InOrderTraverse(T)——中序遍历二叉树

⑩PostOrderTraverse(T)——后序遍历二叉树

⑪LevelOrderTraverse(T)——层序遍历二叉树

(2)插入类:

①InitBiTree(&T)——初始化二叉树

②Assign(T, &elem, value)——给结点赋值

③CreateBiTree(&T, definition)——按照定义构造二叉树

④InsertChild(&T, p, L/R, c)——在某结点插入孩子

(3)删除类:

①ClearBiTree(&T)——清空二叉树

②DestroyBiTree(&T)——销毁二叉树

③DeleteChild(&T, p, L/R)——删除某结点孩子

10.满二叉树:深度为k且含有2k - 1个结点的二叉树。

11.完全二叉树:树中所含的n个结点和满二叉树中编号为1 ~ n的结点一一对应。

12.二叉树的性质:

(1)性质1:在二叉树的第i层上至多有2i-1个结点。(i ≥ 1)

用归纳法证明:

归纳基:i = 1时,只有一个根结点,2i-1 = 2= 1成立;

归纳假设:假设对所有的j,1 ≤ j < i,命题成立;

归纳证明:二叉树上每个结点至多有两棵子树,则第i层的结点数 = 2i-1 × 2 = 2i-1

(2)性质2:深度为k的二叉树上至多含有2k - 1个结点。(k ≥ 1)

证明:基于性质1,深度为k的二叉树上的结点数至多为20 + 21 + ... + 2k-1 = 2k - 1。

(3)性质2推广:满二叉树第k层的结点个数比其第1 ~ k-1层所有结点总数多1个。

(4)性质3:对任何一颗二叉树,若它含有n0个叶子结点、n2个度为2的结点,则必存在:n= n2 + 1。

证明:设二叉树上结点总数n = n0 + n+ n2,二叉树上分支总数b = n+ 2n2,而b = n - 1 = n+ n1 + n2 - 1,所以n= n2 + 1。

(5)性质3推广:已知一棵度为m的树中有N1个度为1的结点,N2个度为2的结点,...,Nm个度为m的结点,该树中叶子结点数为:1 + N2 + 2N3 + ... + (m-1)Nm。

证明:设N为总结点数,N0为叶子结点数,则N = N0 + N1 + N2 + ... + Nm,又有:N - 1 = 分支总数,则N - 1 = N1 × 1 + N2 × 2 + ... + Nm × m,所以N0 = 1 + N2 + 2N3 + ... + (m-1)Nm。

(6)性质4:具有n个结点的完全二叉树的深度为⌊log2n⌋ + 1。(⌊n⌋为对n的向下取整)

证明:设完全二叉树的深度为k,则根据性质2可得2k-1 ≤ n < 2k,即k - 1 ≤ log2n < k,因为k只能是整数,所以k = ⌊log2n⌋ + 1。

(7)性质5:若对含有n个结点的完全二叉树从上到下且从左至右进行1 ~ n的编号,则对完全二叉树中任意一个编号为i的结点:

①若i = 1,则该结点是二叉树的根,无双亲,否则,编号为⌊i/2⌋的结点为其双亲结点;

②若2i > n,则该结点无左孩子,否则,编号为2i的结点为其左孩子结点;

③若2i + 1 > n,则该结点无右孩子结点,否则,编号为2i + 1的结点为其右孩子结点。

转载于:https://www.cnblogs.com/hou36/p/9899018.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值