【C++ 学习笔记】数据结构——树的概念和定义

【C++ 学习笔记】数据结构——树的概念和定义

一、基本概念

1.树

树是 n ( n ≥ 0 ) n(n≥0) n(n0)个结点的有限集合 T T T(Tree)。
n = 0 n=0 n=0时,称为空树;
n > 0 n>0 n>0时, 该集合满足如下条件:

  1. 其中必有一个称为根(root)的特定结点,它没有直接前驱,但有零个或多个直接后继。
  2. 其余n-1个结点可以划分成 m ( m ≥ 0 ) m(m≥0) m(m0)个互不相交的有限集 T 1 T_1 T1 T 2 T_2 T2 T 3 T_3 T3 . . . ... ... T m T_m Tm,其中 T i T_i Ti又是一棵树,称为根root的子树。 每棵子树的根结点有且仅有一个直接前驱,但有零个或多个直接后继。

    图 1. 树的图示方法 图1.树的图示方法 1.树的图示方法

2.树的相关概念

  1. 结点:包含一个数据元素及若干指向其它结点的分支信息。
  2. 结点的度:一个结点的子树个数称为此结点的度。
  3. 叶结点:度为 0 0 0的结点,即无后继的结点,也称为终端结点。
  4. 分支结点:度不为 0 0 0的结点,也称为非终端结点。
  5. 孩子结点:一个结点的直接后继称为该结点的孩子结点。
  6. 双亲结点:一个结点的直接前驱称为该结点的双亲结点。
  7. 兄弟结点:同一双亲结点的孩子结点之间互称兄弟结点。
  8. 祖先结点:一个结点的祖先结点是指从根结点到该结点的路径上的所有结点。在图1中,结点 K K K的祖先是 A A A B B B E E E
  9. 子孙结点:一个结点的直接后继和间接后继称为该结点的子孙结点。在图1中,结点 D D D的子孙是 H H H I I I J J J M M M
  10. 树的度: 树中所有结点的度的最大值。
  11. 结点的层次:从根结点开始定义,根结点的层次为 1 1 1,根的直接后继的层次为 2 2 2,依此类推。
  12. 树的高度(深度): 树中所有结点的层次的最大值。
  13. 有序树:在树 T T T中,如果各子树 T i T_i Ti之间是有先后次序的,则称为有序树。
  14. 森林: m ( m ≥ 0 ) m(m≥0) m(m0)棵互不相交的树的集合。将一棵非空树的根结点删去,树就变成一个森林;反之,给森林增加一个统一的根结点,森林就变成一棵树。

二、二叉树的定义与基本操作

1.定义

我们把满足以下两个条件的树形结构叫做二叉树(Binary Tree):

  1. 每个结点的度都不大于2;
  2. 每个结点的孩子结点次序不能任意颠倒。

由此定义可以看出,一个二叉树中的每个结点只能含有 0 0 0 1 1 1 2 2 2个孩子,而且每个孩子有左右之分。我们把位于左边的孩子叫做左孩子,位于右边的孩子叫做右孩子。

图 2. 二叉树的五种基本形态 图2.二叉树的五种基本形态 2.二叉树的五种基本形态

2.满二叉树

深度为 k k k且有 2 k − 1 2^{k}-1 2k1个结点的二叉树。在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。 图3(a)所示的二叉树,即为一棵满二叉树。
满二叉树的顺序表示,即从二叉树的根开始, 层间从上到下, 层内从左到右,逐层进行编号( 1 1 1 2 2 2 … … n n n)。例如图3(a)所示的满二叉树的顺序表示为( 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 14 14 14 15 15 15)。

图 3. 满二叉树与完全二叉树 图3.满二叉树与完全二叉树 3.满二叉树与完全二叉树

3.完全二叉树

深度为 k k k,结点数为 n n n的二叉树,如果其结点 1 1 1 ~ n n n的位置序号分别与满二叉树的结点 1 1 1 ~ n n n的位置序号一一对应(也就是深度为 1 1 1 ~ k − 1 k-1 k1的所有结点都是满二叉树,第 k k k层结点全部都靠在左边),则为完全二叉树, 如图3(b)所示。
满二叉树必为完全二叉树, 而完全二叉树不一定是满二叉树。

三、二叉树的性质

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

证明: 用数学归纳法。
归纳基础:当 i = 1 i=1 i=1时,整个二叉树只有一根结点,此时 2 i

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值