树和二叉树练习

树和二叉树练习

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )

A 不存在这样的二叉树

B 200

C 198

D 199

叶子是度数为0的结点。

. 对任何一棵二叉树, 如果度为0其叶结点个数为 n0, 度为2的分支结点个数为 n2,则有n0=n2 +1

都为200

2.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n

B n+1

C n-1

D n/2

设完全二叉树中

度数为0的结点X0个

度数为1的结点X1个

度数为2的结点X2个

. 对任何一棵二叉树, 如果度为0其叶结点个数为 n0, 度为2的分支结点个数为 n2,则有n0=n2 +1

故:

X0=X2+1;

X0+X1+X2=2n;

综合两试:

2X0+X1=2n+1;

在完全二叉树中度数为1的结点可能为1也可能为0;

故X1=1;X0=n;

一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )

A 11

B 10

C 8

D 12

1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2^(i-1) 个结点.

2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h- 1.

设树的高度为h:

完全二叉树最后一层缺x个结点。

2^(h-1)+x=531

x的取值为:

【0,2^(h-1)-1】

2^10=1024

h=10时

x=19

2^(h-1)-1=511

x的取值为:

【0,511】

二叉树的三种遍历方式:

树和二叉树练习_第1张图片

代码实现:

//前序
void PrevOrder(BTNode* root) {
	if (root == NULL) {
		printf("NULL ");
		return;
	}
	printf("%c ", root->data);
	PrevOrder(root->left);
	PrevOrder(root->right);
}

//中序
void InOrder(BTNode* root) {
	if (root == NULL) {
		printf("NULL ");
		return;
	}
	InOrder(root->left);
	printf("%c ", root->data);
	InOrder(root->right);
}

//后序
void PostOrder(BTNode* root) {
	if (root == NULL) {
		printf("NULL ");
		return;
	}
	PostOrder(root->left);
	PostOrder(root->right);
    printf("%c ", root->data);
}

 1.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为( )

A ABDHECFG

B ABCDEFGH

C HDBEAFCG

D HDEBFGCA

树和二叉树练习_第2张图片

 树和二叉树练习_第3张图片

2.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为 ()

A E

B F

C G

D H 

树和二叉树练习_第4张图片

前序,后序可以确定根。结合中序即可把树还原。

3.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为____。

A adbce

B decab

C debac

D abcde 

树和二叉树练习_第5张图片

你可能感兴趣的:(数据结构,算法,c语言)