以二叉链表存放一棵含有N个节点的二叉树,共有()个非空指针。
A.N+1
B.N-1
C.N
D.2*N
A.N+1
B.N-1
C.N
D.2*N
第1题
假设二叉树根节点的层次为0,一棵深度(高度)为k的满二叉树和同样深度的完全二叉树各有f个节点和c个节点,下列关系式不正确的是
A.f≥)c
B.c>f
C.f=2的k-1次幂减1
D.c大于2的A次幂减1
第2题
阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。
【说明】
下面的程序构造一棵以二叉链表为存储结构的二叉树算法。
【函数】
BTCHINALR *createbt (BTCHINALR *bt )
{
BTCHINALR *q;
struct node1 *s [30];
int j,i;
char x;
printf ("i,x =" ); scanf ("%d,%c",&i,&x );
while (i!=0 && x!='$')
{ q = (BTCHINALR* malloc (sizeof (BTCHINALR )); //生成一个结点
(1);
q->1child = NULL;
q->rchild = NULL;
(2);
if((3);)
{j=i/2 //j为i的双亲结点
if(i%2==0
(4) //i为j的左孩子
else
(5) //i为j的右孩子
}
printf ("i,x =" ); scanf ("%d,%c",&i,&x ); }
return s[1]
}
第3题
n个结点的二叉树,若用二叉链表作为存贮结构,则左、右子链域的总数为(45)个,其中(46)个用于链接子结点,(47)个空闲着。
A.n
B.n-1
C.n+l
D.n-2
第4题
一棵查找二叉树,其节点A,B,C,D,E,F依次存放在一个起始地址为n(假定地址以字节为单位顺序编号)的连续区域中,每个节点占4字节,前二字节存放节点值,后二字节依次放左指针、右指针。
若该查找二叉树的根节点为E,则它的一种可能的前序遍历为(20),相应的层次遍历为(21)。在以上两种遍历情况下,节点c的左指针LC的存放地址为(22),LC的内容为(23)。节点A的右指针RA的内容为(24)。
A.EAFCBD
B.EFACDB
C.EABCFD
D.EACBDF
第5题
阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
二叉树的二叉链表存储结构描述如下:
lypedef struct BiTNode
{ datatype data;
street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree;
下列函数基于上述存储结构,实现了二叉树的几项基本操作:
(1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树;
(2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x;
(3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针;
(4) frceAll(BiTree p):释放二叉树全体结点空间。
[函数]
BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p;
if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;
p->data=x;
p->lchild=lbt;
p->rchild=rbt;
(1);
}
BiTree InsertL(BiTree bt, elemtype x,BiTree parent)
{ BiTree p;
if (parent= =NULL) return NULL;
if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;
p->data=x;
p->lchild= (2);
p->rchild= (2);
if(parent->lchild= =NULL) (3);
else{
p->lchild=(4);
parent->lchild=p;
}
return bt;
}
BiTree DeleteL(BiTree bt, BiTree parent)
{ BiTree p;
if (parent= =NULL||parent->lchild= =NULL) return NULL;
p= parent->lchild;
parent->lchild=NULL;
freeAll((5));
return bt;
第6题
A.2m+l
B.2m-1
C.2(m-1)
D.2m
第7题
一个具有m个结点的二叉树,其二叉链表结点(左、右孩子指针分别用left和right表示)中的空指针总数必定为(57)个。为形成中序(先序、后序)线索二叉树,现对该二叉链表所有结点进行如下操作:若结点p的左孩子指针为空,则将该左指针改为指向p在中序(先序、后序)遍历序列的前驱结点;若p的右孩子指针为空,则将该右指针改为指向p在中序(先序、后序)遍历序列的后继结点。假设指针s指向中序(先序、后序)线索二叉树中的某结点,则(58)。
A.m+2
B.m+1
C.m
D.m-1
第11题
一棵查找二叉树,其结点A、B、C、D、E、F依次存放在一个起始地址为n(假定地址以字节为单位顺序编号)的连续区域中,每个结点占4个字节:前二个字节存放结点值,后二个字节依次放左指针、右指针。若该查找二叉树的根结点为E,则它的一种可能的前序遍历为(1),相应的层次遍历为(2)。在以上两种遍历情况下,结点C的左指针Lc的存放地址为(3),Lc的内容为(4)。结点A的右指针Ra的内容为(5)。
A.EAFCBD
B.EFACDB
C.EABCFD
D.EACBDF