【数据结构】树

一些简单的性质:

  • 设树中的结点总数为n,等于所有结点的度数之和+1。设树中度数为i的结点数为ni
    ,则n=n0+n1+n2+…+nm=1+1 * n1+2 * n2+…+m*nm
  • 度为m的树中第i层上至多有m^i-1个结点(i>=1)
  • 高度为h的m叉树至少有(m^h-1)/(m-1)个结点
  • 具有n个结点的m叉树的最小高度为
    【数据结构】树_第1张图片

二叉树

五种基本形态

  • 空二叉树
  • 只有根结点
  • 只有左子树
  • 只有右子树
  • 左右子树都有

几种二叉树

  • 满二叉树
  • 完全二叉树
  • 二叉排序树
  • 平衡二叉树

二叉树的性质

  • 非空二叉树上的叶结点数等于2的结点数+1,即n0=n2+1
    B为分支总数,则n=B+1
    扩展:任意一棵树,若结点数量为n,则边的数量为n-1
  • 非空二叉树上第k层上至多有2^(k-1)个结点
  • 高度为h的二叉树至多有2^h-1(h>=1)个结点
  • 对完全二叉树按从上到下、从左到右的顺序依次编号1,2,…n,则有以下关系:
    1:i>1,结点i的双亲的编号[i/2],即当i为偶数时,其双亲的编号为i/2,它是双亲的左孩子。当i为奇数时,其双亲的编号为(i-1)/2,它是双亲的右孩子。
    2:当2i<=n时,结点i的左孩子编号2i,否则无左孩子。
    3:当2i+1<=n时,结点i的右孩子编号为2i+1,否则无右孩子。
    4:结点i所在层次(深度)为[logi]+1。
  • 具有n个结点的完全二叉树的高度为[log(n+1)]或[logn]+1

二叉树的存储结构

分为两种:顺序存储结构和链式存储结构
顺序是用数组
链式是用二叉链表或者三叉链表。在含n个结点的二叉链表中,含有n+1个空链域

选择题

【数据结构】树_第2张图片【数据结构】树_第3张图片yige【数据结构】树_第4张图片【数据结构】树_第5张图片【数据结构】树_第6张图片【数据结构】树_第7张图片

错题

这里是引用

考虑到第七层的结点是最多的,则树高为7,若是满二叉树,则一共有2^ 7-1=127个结点,而题中二叉树有126个结点,比满二叉树少一个结点,则第七层最多有63个结点
2.

这里是引用

王道答案上用的是公式法,非空二叉树中,度为0和2的结点数之间的关系为n0=n2+1,所以n2=123,总结点数:n=n0+n1+n2=n1+247。n1的取值为0或1,当n1=1时,结点数最多,最多为248

=============================================================
我的做法:124个叶子结点 ,第八层最多有128个叶子结点(满二叉树情况下),显然这不是满二叉树,第七层有64个结点,即第8层以上是满二叉树。
下面进行分类讨论,对第七层的64个结点讨论是否每个都有子结点有几个子节点

  • 62个子节点度为2,剩下2个作为第七层的叶子结点
    则共有124+2=126个叶子结点不符合题意
  • 61个子节点度为2,剩下3个作为第七层的叶子结点
    则共有122+3=125个叶子结点
  • 61个子节点度为2,一个子节点度为1,剩下2个作为第七层的叶子结点
    则共有122+1+2=125个叶子结点
  • 60个子节点度为2,一个子节点度为1,剩下3个作为第七层的叶子结点
    则共有120+1+3=124个叶子结点
    则共有121(第八层的叶子结点数)+127(第七层及以上)=248

这里是引用

用概念里面的公式,注意那个[x],是超过x的最小整数
4.

这里是引用

注意题中的任意,说明是对于任意二叉树而言的,考虑最坏情况2^k-1=31,即满足最坏情况的最好条件
在这里插入图片描述5.(C)

这里是引用

后序遍历:左右根 暂时不能理解答案的解释,先背下来
6.在二叉树的前序序列、后序序列、中序序列中,所有叶子结点的先后顺序完全相同
7.前序为A,B,C,后序为C,B,A的二叉树共有4棵
8.

这里是引用

二叉树的前序序列和中序序列的关系相当于以前序序列作为入栈次序,以中序序列作为出栈顺序
所以问题就转化为栈的题目
当然还有一种笨方法是一个一个试过去。
9.线索二叉树是一种物理结构
10.一棵左子树为空的二叉树在先序线索化之后,其中空的链域个数为2个
根结点的左子树为空且也没有前驱结点,先序遍历的最后一个元素为叶结点,所以空的链域有2个
11.

【数据结构】树_第8张图片

12.(D)

【数据结构】树_第9张图片

在先序线索二叉树中查找一个结点的先序后继很简单,查找先序前驱必须知道该结点的双亲结点,后序线索二叉树查找一个结点的后序前驱很简单,查找后序的后继必须知道该结点的双亲结点
13.(C)

这里是引用

举一个例子,注意只是左子树中最右的结点,但是不是叶子结点
14.后序线索树的遍历仍需要栈的支持
15.

这里是引用

前序和后序的顺序完全相反,则说明该二叉树只有左孩子或者右孩子,即该二叉树的高度为4。以1的孩子结点2作为根结点的子树也只能有左子树或者右子树,所以2不可能在序列中间,只有可能在首尾
16.(B)
在这里插入图片描述前序序列相当于入栈顺序,则中序序列相当于出栈顺序,而前序序列和中序序列可以确定一棵二叉树,所以根据卡特兰数(组合数的公式)算出

17.(B)

这里是引用

先序序列是先遍历父结点,接着左子树,最后右子树。
中序序列是先遍历左子树,接着父结点,最后右子树。
若没有左子树则先序和中序的序列相等了

18.设F是一个森林,B是由F变化来的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有n+1
非终端结点:度不为0的结点
先看下森林转化成二叉树的规则

【数据结构】树_第10张图片

树转化成二叉树的规则是:左孩子右兄弟,右指针域为空代表该结点没有兄弟结点,最后一棵树的根结点的右指针为空。对于每个非终端结点,其所有孩子结点在转化后最后一个孩子的右指针也为空,所以右指针域为空的点为n+1
19.(D)

【数据结构】树_第11张图片

树转化二叉树中,兄弟可以变成孩子,所以在树T中,X必是其双亲结点的右兄弟,即X在树中必有左兄弟

20.(B)

这里是引用

不理解背下来
21.

这里是引用

树的每个分支的所有子结点的最右结点无右孩子,根节点转化后也没有右孩子。
二叉树中无右孩子的结点个数=分支结点数+1
特殊值法:
【数据结构】树_第12张图片
22.

这里是引用

暂时不理解,选(C)
23.

这里是引用

【分析】
在这里插入图片描述

你可能感兴趣的:(数据结构与算法,数据结构,算法,树)