当前位置:文档之家› 树和二叉树习题答案

树和二叉树习题答案

第六章 练习
1、试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。

态。

解:
(1)3个结点的树: (2)3个结点的二叉树:
2、已知一棵度为m 的树中有个度为1的结点,个度为2 结点,…,个度为m 的结点,问该树中有多少个叶子结点
解:由树的特征可知,除顶点外每个结点对应于一条边,总边数等于各顶点度数之和,所以有:
所以:
3、对第1题所得的各种形态的二叉树,分别写出前序、中序和后序遍历的序列。

解:
(1) 前:ABC 中:BAC 后:BCA (2) 前:ABC 中:CBA 后:CBA (3) 前:ABC 中:BCA 后:CBA (4) 前:ABC 中:ABC 后:CBA (5) 前:ABC 中:ACB 后:CBA
A
B
C
A
B C
A
B C
A
B C
A
C B
A
B
C
A
C
B
4、试以二叉链表作为存储结构,编写算法将二叉树中所有结点的左、右子树相互交换。

void Bitree_Revolute(Bitree
T)
A
B
C
D
E
F
G
H
I
J
K
管当前结点是否有左右孩子,都入队列.
这样当树为完全二叉树时,遍历时得到是一个连续的不包含空指针的序列.反之,则序列中会含有空指针.
8、根据栈的存储结构写出二叉树的非递归形式的先序遍历算法。

解:void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{
InitStack(S);
Push(S,T); //根指针进栈
while(!StackEmpty(S))
{
while(Gettop(S,p)&&p)
{
visit(p->data);
push(S,p->lchild);
} //向左走到尽头
pop(S,p);
if(!StackEmpty(S))
{
pop(S,p);
push(S,p->rchild); //向右一步
}
}//while
}//PreOrder_Nonrecursive
9、假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为,,,,,,,。

试为这8个字母设计哈夫曼编码。

所以这8个字符的哈夫曼编码分别为:
1010,00,10000,1001,11,10001,01,1011。

相关主题