接着搞数据结构错题集(⊙o⊙)…
序号标题为解答,引用为题目和答案
- 总结点数=1 * 4 + 2 * 2 + 3 * 1 + 4 * 1 + 1(根节点) = 16
叶子结点数=16-4-2-1-1(总节点数-度不为0的个数)=8
设树 T 的度为 4,其中度为 1,2,3 和 4 的结点个数分别为 4,2,1,1 则 T 中的叶子
数为 ( 8 )
- 如图是参照牛客网牛友给出 森林到二叉树的转化
第一个颗树的根节点作为二叉树的根节点、接着下一颗树的根节点作为,第一棵树的右子树
因为除去右子树过后 剩下的就是 左子树和根节点 (即为第一个子树)
设森林 F 对应的二叉树为 B,它有 m 个结点, B 的根为 p,p 的右子树结点个数为 n,森林 F
中第一棵树的结点个数是( A )
A.m-n B.m-n-1 C.n+1 D.条件不足,无法确定
- n0 = n2 + 1
推导公式如下:
n 为 结点的总数
n0 为 度为0的结点总数
依次类推
①从边的角度考虑:n - 1 (总共有这么多边) = 2 * n2 + 1 * n1 (想想 每个结点指向的边 就插在 一个结点头上)
②从结点的角度考虑:n = n0 + n1 + n2
结合①和②就可以退出公式来了
具有 10 个叶结点的二叉树中有( B )个度为 2 的结点
- 假设该完全二叉树的深度为 k,则根据完全二叉树的定义和性质 2有:
2 ^(k-1)-1< n ≤2^k-1
所以有:k-1≤ log2^(n+1)<k - 二叉链表:左孩子右兄弟
利用二叉链表存储树,则根结点的右指针是( C )。【青岛大学 2001 五、 5 (2 分)】
A.指向最左孩子 B.指向最右孩子 C.空 D.非空
- 题目中说从1开始编号,也就是从小到大进行,后半段的描述得从小到大的顺序为:左、右、根,所以为后序遍历。
对二叉树的结点从 1 开始进行连续编号, 要求每个结点的编号大于其左、 右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用 ( C )次序的遍历实现编号。【北京理工大学 2000 一、 4 (2 分)】
A.先序 B. 中序 C. 后序 D. 从根开始按层次遍历
- 树的双亲表示法、孩子表示法和孩子兄弟表示法
双亲表示法 取一块连续的内存空间,在存储每个结点的同时,各自都附加一个记录其父结点位置的变量。
孩子表示法 将树中的每个结点的孩子结点排列成一个线性表,用链表存储起来。对于含有 n 个结点的树来说,就会有 n 个单链表,将 n 个单链表的头指针存储在一个线性表中,这样的表示方法就是孩子表示法。
兄弟孩子表示法 使用链式存储结构存储普通树。链表中每个结点由 3 部分组成,其中孩子指针域,表示指向当前结点的第一个孩子结点,兄弟结点表示指向当前结点的下一个兄弟结点。 - 注意题干说的是叶子节点的先后顺序都是先左后右
在二叉树结点的先序序列,中序序列和后序序列中,所有叶子结点的先后顺序( B )
A.都不相同 B.完全相同 C.先序和中序相同,而与后序不同
D.中序和后序相同,而与先序不同
- 要么是 只有左子树 要么只有 右子树
某二叉树的前序序列和后序序列正好相反,则该二叉树一定是(高度等于其结点数)的二叉树
- 线索二叉树中每个节点有两个指针域,用于存放该节点的左右孩子或者前驱和后继节点,若二叉树有n个节点,则除了根节点外其它的n-1个节点都是某个节点的孩子,所以这n-1个节点占掉了n-1个指针域。按照题意,剩下的2n-(n-1)=n+1个指针域(包括空指针)就是线索数。
n个结点的线索二叉树上含有的线索数为( n + 1)
- 先序线索树和后序线索树是不完善的,先序线索树查找节点前驱需要用栈,后序线索树查找节点后驱需要用栈,而遍历过程一般是从第一个节点开始逐渐查个后驱的过程
- 注意审题,前提条件是要完全二叉树,才可以确定
当一棵有 n 个结点的二叉树按层次从上到下,同层次从左到右将数据存放在一维数组
A[l…n] 中时,数组中第 i 个结点的左孩子为( D )【南京理工大学 1999 一、 18(2 分)】
A.A2i B. A[2i+1](2i+1=< n) C.A[i/2] D.无法确定
- 把满足以下两个条件的树型结构叫做二叉树。
u1.每个结点的度都不大于2。
u2.每个结点的孩子结点次序不能任意颠倒。 - 应该使用队列
对一棵二叉树进行层次遍历时,应借助于一个栈
-
二叉树的两种存储方式:
①一维数组:即用一位数组存储二叉树中的结点。采用层次遍历,从上至下从左到右依次存储,根节点存储在下标为1的位置,对于任意位置i的结点,其左子树位于2i,右子树位于2i+1
②链式存储:用链表表示二叉树。每个结点存储自身的数据以及两个分别指向左孩子和右孩子结点的指针 -
中序遍历一棵二叉排序树的结点就可得到排好序的结点序列
二叉排序树的定义:二叉排序树或者是一棵空树,或者是一棵具有如下性质的二叉树:
⑴ 若它的左子树非空,则左子树上所有结点的值均小于根结点的值;
⑵ 若它的右子树非空,则右子树上所有结点的值均大于根结点的值;
⑶ 左、右子树本身又各是一棵二叉排序树。
-
顺序存储一般只适用于完全二叉树,就是用一维数组存储二叉树中的结点
-
讲树转为二叉树
参考牛客网 网友提供图解
-
线索化的规则是:左线索指针指向当前结点在中序遍历序列中的前驱结点,右线索指针指向后继结点。因此我们需要一个指针p指向当前正在访问的结点,pre指向p的前驱结点,p的左线索指针如果存在的话直接指向pre(也就是前驱结点),pre的右线索如果存在则指向p(也就是直接后继)。
-
非空二叉树中序遍历(无头结点的情况)线索化后,第一个结点无前驱,最后一个结点无后继
-
树的带权路径长度(Weighted Path Length of Tree):定义为树中所有叶结点的带权路径长度之和。
结点的带权路径长度:结点到树根之间的路径长度与该结点上权的乘积。 -
树在计算机内的表示方式有:双亲表示法、孩子链表法、孩子兄弟表示法
-
二叉树中某一结点左子树的深度减去右子树的深度称该为该结点的平衡因子
-
一颗右n个结点的满二叉树有0个度为1的结点、有**( n - 1 )/ 2 个分支和(n + 1)/ 2**个叶子,该二叉树的深度为 log2^n(取下界) + 1
-
哈夫曼树构造方法:
①首先从备选数中选取结点中最小的两个数,并计算两个数之和
②生成的新结点放入被选数中,继续重复①的步骤,直到数都选完
有一份电文中共使用 6 个字符 :a,b,c,d,e,f,它们的出现频率依次为 2,3,4,7,8,9,试构造一
棵哈夫曼树, 则其加权路径长度 WPL 为80,字符 c 的编码是 001(不唯一)