数据结构——9.树和二叉树

数据结构

9.树和二叉树

1.1树的概念

树(Tree):是由n(n≥0)个结点构成的有限集合T。若n=0称为空树。否则,一个非空树需满足以下两个条件:
(1)有且只有一个特定的称为根(root)的结点;
(2)除根结点以外的其它结点被分成m(m≥0)个互不相交的有限集合 T 1 , T 2 , … , T m T_1,T_2,…,T_m T1T2Tm,其中每个集合又是一棵树。其中树 T 1 , T 2 , … , T m T_1,T_2,…,T_m T1T2Tm称作树根的子树(subtree)。

在这里插入图片描述

根节点:唯一的没有前驱的结点,图中为A
叶结点:没有后继的结点,图中为E、F、K、L、H、I、J
结点的度:结点的后继的数量。A的度为3,C的度为3
树的度:结点的度的最大值,该树的度为3
儿子(孩子)结点:结点的后继结点。A的儿子结点为B C D
父亲(双亲)节点:结点的前驱结点。B C D的父亲节点为A
兄弟节点:父亲结点相同的结点,比如B C D互为兄弟节点。
堂兄弟结点:父亲结点互为兄弟结点的结点。E H互为堂兄弟结点
祖先节点:K结点的祖先节点包括A C G,就一条链往上回溯即可
子孙节点:A结点的分支和分支的分支往下都是它的子孙结点,对于C来说,G H I K L均为它的子孙节点
结点所处层次:图中显然,比如A在第一层,K L在第四层
树的高度:有几层高度就是几。该树高度为4
森林:多棵树构成森林

有序树:计算机的存储是有序的,为方便计算机处理,往往把子结点按从左到右的次序顺序编号,即把树作为有序树(ordered tree)看待。(结点的子树在树中的位置固定,不能互换)
在这里插入图片描述

1.2二叉树的定义

二叉树(Binary Tree)的递归定义:二叉树是n(n≥0)个结点的有限集合,该集合或者为空(n=0),或者由一个根结点及两棵互不相交的左、右子树构成,而其左、右子树又都是二叉树。图中B的孩子D叫右孩子,D的孩子E叫左孩子。
在这里插入图片描述

度为2的有序树是二叉树吗?
不是,因为在有序树中,删除某个度为2的结点的第一子树后,第二子树自然顶替成为第一子树。而在二叉树中,若删除某结点的左子树,则左子树为空,右子树仍然是右子树。

1.3二叉树的概念和术语

满二叉树(full binary tree):如果一棵二叉树中任意一层的结点个数都达到了最大值,则此二叉树称为满二叉树。一棵高度为k的满二叉树具有 2 k − 1 2^k-1 2k1个结点

在这里插入图片描述

如果一个结点的编号为i,那么其左孩子编号为2i,右孩子编号为2i+1。若其左孩子被删,右孩子的编号不会改变,仍是2i+1。
其父亲结点的编号也可以求得,为i/2,向下取整。

完全二叉树(complete binary tree):对于深度为k,有n个结点的完全二叉树,其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应。
所以完全二叉树的k层,前k-1层都是满的,第k层可能满也可能不满。

完全二叉树的特征:
(1)叶子结点只可能在层次最大的两层上出现。
(2)任一结点,若其左分支下的子孙的最大层次为L,则其右分支下的最大层次为L或L-1,即若某结点无左子树,则该结点一定没右子树。
(3)满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树。

在这里插入图片描述

1.4二叉树的性质

性质1:一棵非空二叉树的第i层上最多有 2 i − 1 2^{i-1} 2i1个结点(i≥1)。
在这里插入图片描述

证明:

  • 当i=1时,二又树只有一个结点即根结点,24-1=20=1,命题成立。
  • 假设i=k时结论成立,即第k层上至多有2*-1个结点。*
  • 由归纳假设可知,第k+1层上至多有2个结点,因为二又树的每个结点的度至多为2,所以在第k+1层上的最大结点数为第k层上的最大结点数的2倍,即2×2*-1=2*。
  • 综上,命题成立。

性质2:一棵高度为k的二叉树,最多具有 2 k − 1 2^k-1 2k1个结点。

证明:

  • 这棵二叉树中的每一层的结点个数必须最多。

  • 根据性质1,第层的结点数最多为等于 2 i − 1 2^{i-1} 2i1

  • 因此结点个数N最多为:
    ∑ i = 1 k 2 i − 1 = 2 k − 1 \sum_{i=1}^{k}2^{i-1}=2^k-1 i=1k2i1=2k1

性质3:任何一棵二叉树中,若叶子数为 n 0 n_0 n0,度为2的结点数为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1

性质4:具有n个结点的完全二叉树的高度 k = ⌈ l o g 2 ( n + 1 ) ⌉ o r ⌊ l o g 2 ( n + 1 ) ⌋ + 1 k=\lceil log_2(n+1)\rceil or \lfloor log_2(n+1)\rfloor+1 k=log2n+1orlog2n+1+1 ⌈ ⌉ \lceil \rceil 为向上取整符, ⌊ ⌋ \lfloor \rfloor 为向下取整符。

性质5:如果对一棵有n个结点的完全二叉树按层次自上而下(每层自左而右)对结点从1到n进行编号,则对任意一个结点 i ( 1 ≤ i ≤ n ) i(1≤i≤n) i1in有:
(1)若 i = 1 i=1 i=1,则结点 i i i为根,无双亲;若 i > 1 i>1 i>1,则结点 i i i的双亲结点的编号是 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2
(2)若 2 i ≤ n 2i≤n 2in,则 i i i的左孩子的编号是 2 i 2i 2i,否则i无左孩子。
(3)若 2 i + 1 ≤ n 2i+1≤n 2i+1n,则i的右孩子的编号是 2 i + 1 2i+1 2i+1,否则 i i i无右孩子。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值