广州大学松田学院7数据结构复习题-树-参考答案 下载本文

}BT;

int count=0;

void Leafnum(BT *T) {

if (T!=NULL)

{ if(T->lchild==NULL && T->rchild==NULL) count++;

Leafnum(T->lchild); Leafnum(T->rchild); } }

解:3 (求叶结点数) (2,3,4改为程序填空)

二. 程序填空

1.填空完成二叉树按层次遍历的程序

typedef struct BT

{ datatype data; // 定义结点 BT *lchild; BT *rchild; }BT;

void Levelorder(BT *T) // 层次遍历 { int i,j;

BT *q[100],*p; p=T;

if ( p!=NULL )

{ i=1;q[i]=p;j=2; } while (i!=j)

{ p=q[i];

cout<< p->data ;

if ( p->lchild!=NULL )

{ q[j]= p->lchild ;j++;} if (p->rchild!=NULL)

{ q[j]= p->rchild ;j++; } i++; }

}

}

17

三. 应用题

1. 将下列二叉树转换为森林。

A

C B

D E F G

J I H

K

解: A G C B E J K F D I H

2. 画出和下列二叉树相应的森林。 解: A C F I E B M

D H K

G J

(根右边的子树肯定是森林,而孩子结点的右子树均为兄弟)

18

3. 某二叉树的结点数据采用顺序存储,其结构如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 E A F D H C G I B (1)画出该二叉树(2分)

(2)写出结点值为D的父结点及左、右子树(3分) 解: (1)

E

A F

H D

C I G

B

(2) D的父结点为A

D的左子树为C D的右子树为空

4. 某二叉树的存储如下: 1 2 3 Lchild Data Rchild 0 J 0 0 H 0 2 F 0 4 3 D 9 5 7 B 4 6 5 A 0 7 8 C 0 8 0 E 0 9 10 G 0 10 1 I 0 其中根结点的指针为6,lchild、rchild分别为结点的左、右孩子的指针域,data为数据域。 (1)画出该二叉树(3分)

(2)写出该树的中序遍历的结点序列(2分) 解:

(1) A (2)中序遍历的结点序列:

E C B H F D J I G A

B

C D

E F G

H I J

19

5. 某二叉树的存储如下: lchild Data rchild 1 0 J 0 2 0 H 0 3 2 F 0 4 3 D 9 5 7 B 4 6 5 A 0 7 8 C 0 8 0 E 0 9 10 G 0 10 1 I 0 其中根结点的指针为6,lchild、rchild分别为结点的左、右孩子的指针域,data为数据域。 (1)画出该二叉树(3分)

(2)写出该树的后序遍历的结点序列(2分) 解:

A (1)

B

C D

E F G H I

J

(2)后序遍历的结点序列:E C H F J I G D B A

6. 已知一棵二叉树结点的中序遍历序列为:DEBAFCHG,后序遍历序列:EDBFHGCA,试恢复该二叉树,并写出它的先序遍历的序列。

解:恢复的二叉树

A

B C G D F E H

先序遍历序列为:A B D E C F G H

7. 已知一棵二叉树的后序遍历序列为:ACDBGIHFE,中序遍历序列为:ABCDEFGHI,试恢复该二叉树,并写出它的层次遍历的序列。

20