二叉树的概念性质

2. 二叉树的概念

二叉树是有序树,子树有左右之分,次序不能任意颠倒。即使树中结点只有一棵子树,也要区分他是左子树还是右子树。

二叉树和度为2的有序树的区别:

  1. 度为2的树至少有3个结点,而二叉树可以为空。
  2. 度为2的有序树的孩子结点的左右次序是相对于另一孩子结点而言的,如果某个结点只有一个孩子结点,这个孩子结点就无需区分其左右次序;而二叉树无论其孩子数是否为2,均需确定其左右次序,也就是说二叉树的结点次序不是相对与另一结点而言,而是确定的。

满二叉树

在这里插入图片描述

满二叉树顾名思义就是一个满的二叉树。
满二叉树有 2 h − 1 2^h-1 2h1 个结点,编号 i i i 的结点,如果有双亲,其双亲为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2,如果有左孩子,则左孩子为 2 i 2i 2i ,如果有右孩子,为 2 i + 1 2i+1 2i+1

完全二叉树

而完全二叉树是在满二叉树由下往上、由左往右删除一些结点形成的树。这种树的特点如下:

  1. i ≤ ⌊ n / 2 ⌋ i\le \lfloor n/2 \rfloor in/2 ,则结点 i i i 为分支节点,否则为叶子结点。
  2. 叶子结点只可能在最后 2 层出现。对于最底层的叶子都依次排列在该层最左边。
  3. 如果有度为 1 的结点,只可能有一个,且该结点只有左孩子而无右孩子(重要特征)
  4. 某结点 i i i 为叶子结点或只有左孩子,则编号大于 i i i 的结点均为叶子。
  5. n n n 为奇数,则每个分支节点都有左右孩子;若 n n n 为偶数,则编号最大的分支节点(编号为 n / 2 n/2 n/2 )只有左孩子,没有右孩子,其余分支结点左右孩子都有。

注:删除线表示太浅显易见了。1:最受一个结点n的父结点为 ⌊ n / 2 ⌋ \lfloor n/2 \rfloor n/2 ,在这个结点和这之前的所有节点均为分支节点。5:由1易得。

二叉排序树

二叉排序树:一棵二叉树或者是空二叉树,或者是具有如下性质的二叉树:左子树上所有关键字据小于根结点关键字;右子树上所有关键字据大于根结点关键字;左右子树又个是一棵二叉排序树。简记为左子树<根<右子树。

平衡二叉树

平衡二叉树:树上任一结点的左右子树的深度之差不超过1.

二叉树的性质

  1. n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1 。由树的性质1易得。常在选择题中使用,牢记。
  2. 第k层最多 a k = 2 k − 1 a_k=2^{k-1} ak=2k1 个结点
  3. 前k层最多 S k = 2 k − 1 S_k=2^k-1 Sk=2k1 个结点。
  4. 对完全二叉树编号,有以下关系:
    • i > 1 i>1 i>1 时,结点 i i i 的父节点为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor i/2 。即当 i i i 为偶数时,父结点为 i / 2 i/2 i/2 ; 当 i i i 为奇数时,父结点为 $ (i-1)/2$ , 他是父结点的右孩子。
    • 2 i ≤ N 2i\le N 2iN 时,结点 i i i 的左孩子为 2 i 2i 2i ,否则无左孩子
    • 当时,结点 i i i 的右孩子为 2 i + 1 2i+1 2i+1 ,否则无右孩子
    • 结点 i i i 的深度为 ⌊ log ⁡ 2 i ⌋ + 1 \lfloor \log _2i\rfloor +1 log2i+1 ⌊ log ⁡ 2 ( i + 1 ) ⌋ \lfloor \log _2(i+1)\rfloor log2(i+1)

在这里插入图片描述

二叉树的存储结构

顺序存储

二叉树的顺序存储就是用一组地址连续的存储单元按照编号存储树结点。即完全二叉树上编号为i 的元素存储在数组下标为i-1的单元里。,然后就可以通过一些方法确定结点逻辑上的父子兄弟关系。(书上是这么写的,但是对于完全二叉树,可以把编号为i 的元素存储在数组下标为i的单元里,这样虽然会浪费下标为0的数组单元,但是就可以和完全二叉树的编号对应上,后面确定父子逻辑关系也可以直接用完全二叉树的性质了。)

根据二叉树的性质,完全二叉树采用顺序存储较合适。既不会浪费空间,又可以利用完全二叉树的性质确定结点在树中的位置。

但对于一般的二叉树,则应将每个结点与完全二叉树上的结点相对照,存储在数组中如下图所示,0代表不存在的空结点。注意此时确定结点在树的位置,需要对照着完全二叉树来。
在这里插入图片描述

链式存储结构

lchilddatarchild

选择题常用结论:在含有n个结点的二叉链表中含有n+1个空链域。

题目

一棵高为 h h h 的满 m m m 叉树,
1)各层结点数目?
2)编号为 i i i 的结点的双亲结点(若存在)的编号?
3)编号 i i i 的结点的第 k k k 个孩子结点?
4)编号 i i i 的结点有右兄弟的条件是什么?其右兄弟的编号是多少?
解析:
1) a n = m n − 1 a_n=m^{n-1} an=mn1
2) 设 i i i 在第 n n n 行,其父结点 j j j 在第 n − 1 n-1 n1 行。

  • 在第 n n n 行, i i i 之前有 i − m h − 1 − 1 m − 1 − 1 \Large i-\frac{m^{h-1}-1}{m-1}-1 im1mh111 个结点 。
  • 在第 n − 1 n-1 n1 行, j j j 之前有 ⌊ i − m h − 1 − 1 m − 1 − 1 m ⌋ \LARGE \lfloor\frac{i-\frac{m^{h-1}-1}{m-1}-1}{m}\rfloor mim1mh111 个结点。
  • 所以 j j j 的编号为
    S n − 2 + ⌊ i − m h − 1 − 1 m − 1 − 1 m ⌋ + 1 = m h − 2 − 1 m − 1 + ⌊ i − m h − 1 − 1 m − 1 − 1 m ⌋ + 1 = ⌊ m h − 2 − 1 m − 1 + i − m h − 1 − 1 m − 1 − 1 m ⌋ + 1 = ⌊ i − 2 m ⌋ + 1 \large \begin{aligned} &S_{n-2}+\lfloor\frac{i-\frac{m^{h-1}-1}{m-1}-1}{m}\rfloor+1\\ &=\frac{m^{h-2}-1}{m-1}+\lfloor\frac{i-\frac{m^{h-1}-1}{m-1}-1}{m}\rfloor+1\\ &=\lfloor\frac{m^{h-2}-1}{m-1}+\frac{i-\frac{m^{h-1}-1}{m-1}-1}{m}\rfloor+1\\ &=\lfloor\frac{i-2}{m}\rfloor+1 \end{aligned} Sn2+mim1mh111+1=m1mh21+mim1mh111+1=m1mh21+mim1mh111+1=mi2+1
    3)
    S n + ( i − m h − 1 − 1 m − 1 − 1 ) m = m ( i − 1 ) + 1 + k S_n+(i-\frac{m^{h-1}-1}{m-1}-1)m=m(i-1)+1+k Sn+(im1mh111)m=m(i1)+1+k
    4) ( i − 1 ) % m ! = 0 (i-1)\%m!=0 (i1)%m!=0 节点数减去1个根节点,如果被 m m m 整除,则 i i i 是右孩子。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值