1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。StatusExchangeBiTree(BiTreeT){BiTreep;if(T){p=T-lchild;T-lchild=T-rchild;T-rchild=p;ExchangeBiTree(T-lchild);}returnOK;}
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。StatusExchangeBiTree(BiTreeT){BiTreep;if(T){p=T-lchild;T-lchild=T-rchild;T-rchild=p;ExchangeBiTree(T-lchild);}returnOK;}
二叉排序树采用二叉链表存储,结点结构为:lchild|data|rchild,指针lchild和rchild分别指向结点的左右孩子结点。令T指向根结点,则求T的左子树上最大的结点算法的核心语句是( )。 A: if (T) { s=T->lchild;if (s) { while(s->rchild) s=s->rchild; }}return s; B: if (T) { s=T->rchild;if (s) { while(s->rchild) s=s->rchild; }}return s; C: if (T) { s=T->rchild;if (s) { while(s->lchild) s=s->lchild; }}return s; D: if (T) { s=T->lchild;if (s) { while(s->lchild) s=s->lchild; }}return s;
二叉排序树采用二叉链表存储,结点结构为:lchild|data|rchild,指针lchild和rchild分别指向结点的左右孩子结点。令T指向根结点,则求T的左子树上最大的结点算法的核心语句是( )。 A: if (T) { s=T->lchild;if (s) { while(s->rchild) s=s->rchild; }}return s; B: if (T) { s=T->rchild;if (s) { while(s->rchild) s=s->rchild; }}return s; C: if (T) { s=T->rchild;if (s) { while(s->lchild) s=s->lchild; }}return s; D: if (T) { s=T->lchild;if (s) { while(s->lchild) s=s->lchild; }}return s;
(1)voidAA(BiTree*T){if(T){printf("%c",T->data);AA(T->lchild);AA(T->rchild);}}Writethefunctionofthealgorithmabove.(5.0分)
(1)voidAA(BiTree*T){if(T){printf("%c",T->data);AA(T->lchild);AA(T->rchild);}}Writethefunctionofthealgorithmabove.(5.0分)
写递归算法,将二叉树中所有结点的左、右子树相互交换。 Status ExchangeBiTree(BiTree& T) { BiTreep; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); __________ } returnOK; }
写递归算法,将二叉树中所有结点的左、右子树相互交换。 Status ExchangeBiTree(BiTree& T) { BiTreep; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); __________ } returnOK; }
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。 StatusExchangeBiTree(BiTree& T) { BiTree p; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); } return OK; }
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。 StatusExchangeBiTree(BiTree& T) { BiTree p; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); } return OK; }
试写一个算法,为一棵二叉树建立后序线索二叉树。StatusPostOrderThreading(BiThrTree&T,BiThrTree&pre);//首先建立后序线索树StatusFindNextInBiThrTree(BiThrTree&q,TElemType*p);//再进行查找//后序线索二叉树的算法StatusPostOrderThreading(BiThrTree&Thrt,BiThrTree&T){BiThrTreepre;Thrt=newBiThrNode;//为线索二叉树建立头结点if(!Thrt)exit(OVERFLOW);Thrt->LTag=Link;Thrt->RTag=Thread;Thrt->rchild=Thrt;//右子树回指if(!T)Thrt->lchild=Thrt;//若二叉树空,左子树回指else{Thrt->lchild=T;pre=Thrt;PostThreading(T,pre);//后序遍历进行后序线索化pre->rchild=Thrt;//最后一个结点线索化pre->RTag=Thread;Thrt->rchild=pre;}returnOK;}StatusPostThreading(BiThrTree&T,BiThrTree&pre){if(T){if(T->LTag==Link)PostThreading(T->lchild,pre);if(T->RTag==Link)PostThreading(T->rchild,pre);if(!T->lchild){T->LTag=Thread;___________}if(pre&&!pre->rchild){pre->RTag=Thread;pre->rchild=T;}pre=T;}returnOK;}
试写一个算法,为一棵二叉树建立后序线索二叉树。StatusPostOrderThreading(BiThrTree&T,BiThrTree&pre);//首先建立后序线索树StatusFindNextInBiThrTree(BiThrTree&q,TElemType*p);//再进行查找//后序线索二叉树的算法StatusPostOrderThreading(BiThrTree&Thrt,BiThrTree&T){BiThrTreepre;Thrt=newBiThrNode;//为线索二叉树建立头结点if(!Thrt)exit(OVERFLOW);Thrt->LTag=Link;Thrt->RTag=Thread;Thrt->rchild=Thrt;//右子树回指if(!T)Thrt->lchild=Thrt;//若二叉树空,左子树回指else{Thrt->lchild=T;pre=Thrt;PostThreading(T,pre);//后序遍历进行后序线索化pre->rchild=Thrt;//最后一个结点线索化pre->RTag=Thread;Thrt->rchild=pre;}returnOK;}StatusPostThreading(BiThrTree&T,BiThrTree&pre){if(T){if(T->LTag==Link)PostThreading(T->lchild,pre);if(T->RTag==Link)PostThreading(T->rchild,pre);if(!T->lchild){T->LTag=Thread;___________}if(pre&&!pre->rchild){pre->RTag=Thread;pre->rchild=T;}pre=T;}returnOK;}
若执行运算while(p→rchild!=null) p=p→rchild,则()
若执行运算while(p→rchild!=null) p=p→rchild,则()
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。StatusExchangeBiTree(BiTree&T){BiTreep;if(T){p=T->lchild;T->lchild=T->rchild;T->rchild=p;ExchangeBiTree(T->lchild);}returnOK;}
1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。StatusExchangeBiTree(BiTree&T){BiTreep;if(T){p=T->lchild;T->lchild=T->rchild;T->rchild=p;ExchangeBiTree(T->lchild);}returnOK;}
以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句(注意:字符之间不要留空白)。 void countleaf (bitree ptr t,int &count) { /*根指针为t,假定叶子数 count 的初值 = 0 */ if (t!=NULL) { if ( (t->lchild==NULL) && (t->rchild==NULL)) (1)________; countleaf (t->lchild,count); countleaf(l->rchild,count); } }
以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句(注意:字符之间不要留空白)。 void countleaf (bitree ptr t,int &count) { /*根指针为t,假定叶子数 count 的初值 = 0 */ if (t!=NULL) { if ( (t->lchild==NULL) && (t->rchild==NULL)) (1)________; countleaf (t->lchild,count); countleaf(l->rchild,count); } }
假设二叉树采用链式方式存储,t为其根结点,请选择正确的选项将函数int Depth(bintree t) 补充完整,该函数功能为求树t的高度。二叉链表定义如下:typedef struct node{datatype data;struct node *lchild,*rchild;}bintnodetypedef bintnode *bintree;函数定义如下:int depth(bintree t) {int height,leftTreeHeight,rightTreeHeight; if (t==NULL) (1) ; else { (2) ; rightTreeHeight =depth(t->rchild); if ( (3) ) height=leftTreeHeight+1; else height= rightTreeHeight +1; } return height;}
假设二叉树采用链式方式存储,t为其根结点,请选择正确的选项将函数int Depth(bintree t) 补充完整,该函数功能为求树t的高度。二叉链表定义如下:typedef struct node{datatype data;struct node *lchild,*rchild;}bintnodetypedef bintnode *bintree;函数定义如下:int depth(bintree t) {int height,leftTreeHeight,rightTreeHeight; if (t==NULL) (1) ; else { (2) ; rightTreeHeight =depth(t->rchild); if ( (3) ) height=leftTreeHeight+1; else height= rightTreeHeight +1; } return height;}