更多"给定一棵用二叉链表表示的二叉树,其中的指针t指向根结点,试写出从根开始"的相关试题:
[简答题]给定一棵用二叉链表表示的二叉树,其中的指针t指向根结点,试写出从根开始,按层次遍历二叉树的算法,同层的结点按从左至右的次序访问。
[多项选择]试写出从大到小输出二叉排序树中所有不小于x的元素的算法。
[填空题]以下算法在指针T所指的二叉排序树上的查找键值等于K的结点。成功时回送指向该结点的指针;否则回送空指针。请分析程序,并在______上填充合适的语句。
bitreptr search_bst(bitreptr T,keytype K)
{ if(T==NULL)return(NULL);
else switch
{ case T—>key==K:______;
case______: return(search_bst(T—>lchild,K));
case______: return(search_bst(T—>rchild,K));
}
}
[填空题][说明]
已知一棵二叉树用二叉链表存储,t指向根结点,p指向树中任一结点。下列算法为输出从t到p之间路径上的结点。
[函数]
#define MaxSize 1000
typedef struct node
TelemType data;
struct node *lchild,*rchild;
BiNode, *BiTree;
void Path(BiTree t, BiNode *p)
BiTree *stack EMaxsize], *stack1 [maxsize], *q;
int tag[Maxsizel, top=0, top1;
q=t;
/*通过前序遍历发现P*/
do while (q!=NULL&&q! =p)
/*扫描左孩子,且相应的结点不为p*/
(1) ;
stack [top] =q;
tag [top] =0;
(2) ;
if (top>0)
if (stack [top]==P) break; /*找到p,栈底到栈顶为t到p*/
if(tag[top]==1) top--;
else q=stack[top];
q=q->rchild;
tag [top] =1;
(3) ;
top--; top1=0;
while(top>0)
q=stack [top]; /*反向打印准备*/
top1++;
(4) ;
top--;
while( (5) ) /*打印栈的内容*/
q=stack1[top1];
printf (q->data);
top1--;
[填空题][说明]
已知一棵二叉树用二叉链表存储,t指向根节点,P指向树中任一节点。下列算法为输出从t到P之问路径上的节点。
[C程序]
#define MaxSize 1000
typedef struct node
TelemType data ;
struct node *ichiid,*rchiid;
BiNode,*BiTree;
void Path(BiTree t,BiNode *P)
BiTree *stack[Maxsize],*stackl[Maxsize],*q;
int tag[Maxsize],top=0,topl;
q=t;
/*通过先序遍历发现P*/
dowhile(q!=NULL &&q!=p)
/*扫描左孩子,_日.相应的节点不为P*/
(1) ;
stack[top]=q;
tag[top]=0;
(2) ;
if(top>0)
if(stack[top]=P) break; /*找到P,栈底到栈顶为t到P*/
if(tag[top]==1)top--;
else q=stack[top];
q=q->rchiid;
tag[top]=1;
(3) ;
top--;topl=0;
while(top>0)
q=stack[top]; /*反向打印准备*/
topl++;
(4) ;
top--;
while( (5) ) /*打印栈的内容*/
q=stackl[topl]j
printf(q->data);
topl--;
[简答题]要求二叉树按二叉链表形式存储,并且:
(1)写一个建立二叉树的算法。
(2)写一个判别给定的二叉树是否是完全二叉树的算法。完全二叉树定义为:深度为K,具有N个结点的二叉树的每个结点都与深度为K的满二叉树中编号从1至N的结点一一对应。
[简答题]编写判定给定的二叉树是否是二叉排序树的函数。
[填空题][说明] 假设二叉树采用连接存储结构进行存储,root 指向根接点,p 所指结点为任一给定的结点,编写一个求从根结点到p所指结点之间路径的函数。
void path (root, p)
btree * root, * p;
Btree *stack[m0], *s;
int tag[m0], top =0, i, find =0;
s =root;
do
while (s ! = NULL)
stack [top] = s;
tag[top] =0;
( (1) )
if (top >0)
( (2) )
if (tag[top] = =1)
if( (3) )
for (i=1; i< =top; i+ + printf ("%d" ,stack[i]- >data);
find=1;
else top - -;
if( (4) )
p=p- >right;
( (5) )
while (find || (s! = NULL && top ! =0));