树学习(4)

1、二叉排序树(二叉搜索树)中,最小值结点的(左孩子一定为空指针)

分析:二叉排序树:左<<右。

 

2、软件生存周期(SDLC,软件生命周期)是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试与测试、验收与运行、维护升级到废弃,这种按时间分程的思想方法是软件工程中的一种思想原则,即按部就班推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,以提高软件质量。

 

3、 将森林F转换为对应的二叉树TF中叶结点的个数等于:T中左孩子指针为空的结点个数。

分析:在二叉树中,结点的左指针指向其孩子,结点的右指针指向其兄弟。所以在一颗二叉树中,如果某个结点的左指针为NULL,就说明这个结点在原来的森林中没有孩子,是叶子结点;如果某个结点的右指针为NULL,就说明这个结点在原来的森林中没有兄弟。

所以森林中的叶子节点=二叉树中左指针为NULL的个数。

 

4、在一颗度为3的树中,度为3的结点个数为2,度为2的结点个数为1,则度为0的结点个数为:6

分析:设该树共有n个结点则n=n0+n1+n2+n3.

该树中除了根结点没有前驱以外,每个节点有且只有一个有前驱,因此有n个结点的树的总边数为n-1条。根据度的定义,总边树与度之间的关系为:n-1=0*n0+1*n1+2*n2+3*n3.

联立两个方程求解得 n0=6.

 

思路二:一颗树,总的结点数=总的边数+1.

所以设度为1的结点数位x,度为0的结点数位y。根据

2+1+x+y = 3*2 +2*1+1*x+0*y +1,解得y=6.

 

5、 若二叉树用二叉链表作为存储结构,则在n个结点的二叉树链表中只有n-1个非空指针域。

6、堆可以用一维数组来存储也可以用完全二叉树来直观地表示堆的结构。

7、  二叉查找树的查找效率与二叉树的树型有关,单枝树时其查找效率最低。

 

8、哈希表是一个在时间和空间上做出权衡的经典例子。如果没有内存限制,那么可以直接将键作为数组的索引。那么所有的查找时间复杂度为O(1);如果没有时间限制,可以用无序数组进行顺序查找,这样只需要很少内存。

 

平衡二叉树中插入结点要随时保证插入后整棵二叉树是平衡的,所以可能需要通过一次或多次树旋转来重新平衡这个树。

 

9、最优二叉树是哈夫曼树,而哈夫曼树不一定是完全二叉树。

10、  根的左子小于根,右子大于根。这是二叉排序树。

 

11、  BB+树:

1BB+都是平衡的多叉树;(两者都是平衡的多分枝树)

2)两者都可以用于组织文件的动态索引结构;

3B树只适用于随机检索,而B+适用于顺序检索和随机检索;(B+树把所有关键码都存在叶节点上,为顺序索引提供方便)

 

12一颗哈夫曼树的结点总是是49,若用二叉链表作为存储结构,则该哈夫曼树总共有 50个空指针域。

 

分析:n个结点,每个节点都有2个域,总共有2n个域。那有多少个分支呢?每一个结点都有父节点(除了根节点),那么就有n-1个分支。空指针域就是 2n-(n-1)=n+1;那么就会有n+1个空指针域,也就是50个。不管是否为满二叉树,这个结论都是成立的。

 

分析二:

只要是二叉树,有n个节点,就一定是有n+1个空指针域,这在学线索二叉树的时候有详细推理过程的。
1.n个结点,每个结点有两个指针共2n个指针;
2.n个结点,除根结点外的n-1个结点都有一个指向父结点的线,即非空指针,共n-1条非空指针;
3.空指针数=总指针数-非空指针=2n-(n-1)=n+1

12、 若平衡二叉树的高度为6,且所有非叶结点的平衡因子为1,则该平衡二叉树的结点总数范围:

分析: 最小二叉平衡树的节点的公式如下F(n)=F(n-1)+F(n-2)+1;或者说深度为n的平衡二叉树,至少有F(n)个结点。Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。注意:F(0)=0,F(1)=1。
得知平衡二叉树的最少的结点的个数为15。而对于二叉树的最多的结点的个数是i2^h-1=31.

 

13、对任意一棵树,设它有n个结点,这n个节点的度数之和为:n-1.

分析:N个结点构成的无环图有N-1条边,每条边对于了一个出度,即度数之和为N-1。

所有结点的度数之和就是树的边个数,边的个数=结点总数-1、

 

14、一颗有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1……n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是: 无法确定。

分析:未知二叉树是否是完全二叉树。

 

15、中序遍历一颗二叉排序树的结点就可得到排好序的结点序列。(所得到的中序遍历序列是一个递增有序序列)

16、任何二叉树的后续线索树进行后序遍历时都必须用栈。(错误)

分析:因为线索二叉树的节点增加了指向前驱结点和指向后继结点的标志,因此在遍历时无需要栈。

线索二叉树
n
个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。

 

17、从根开始按层次(第0层->第1层->……)遍历一颗二叉树,需要队列 辅助数据结构。

分析:仔细想一下,先将根结点A入队,再将A出队(遍历到A),然后将A的所有子结点(假设为B、C)入队,接着,B出队(遍历到B),将其所有子结点入队,接下来出队的自然是C(遍历到C),然后将C的所有子结点入队,这样,就遍历了两层。接下来出队的自然是B的第一个子结点(遍历到该节点),开始第三层的遍历……可见,我们需要一个先进先出的结构,自然选择队列。

 

补充:广度优先用队列;深度优先用栈。

 

18、  n个结点的线索二叉树上含有的线索数为 n+1。  关于线索二叉树学习点击打开链接

分析:.

在有n个结点的二叉链表中必定存在n+1个空指针域,因此可以利用这些空指针域存放指向结点的某种遍历次序下的前趋和后继结点的指针,这种指向前趋和后继结点的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树被称为线索二叉树。

每个节点2个指针域(指向左右孩子),n个结点共有2n个结点;一个n个结点的树有n-1条边,那么线索数为

2n-(n-1)=n+1个。

 

19如果一个二叉树的前序遍历结果是abcdefg,写出可能的中序遍历结果?

方法:1综合起来看是否能构成一颗二叉树;

           2、设abcdefg为进栈的顺序,符合出栈顺序则可能是中序遍历的结果。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值