以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句(注意:字符之间不要留空白)。
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是给定的一棵二叉树,下面的递归程序count(t)用于求得:二叉树t中具有非空的左,右两个孩子的结点个数N2;只有非空左孩子的个数NL;只有非空右孩子的结点个数NR和叶子结点个数N0。其中N2、NL、NR、N0都是全局变量,且在调用count(t)之前都置为0。请将下面程序空处补完整。 typedef struct node { int data; Struct node *lchild,*rchild; }node; int N2,NL,NR,N0; void count(node *t) { if (t->lchild!=NULL) if ( (1)__ _) N2++; else NL++; else if ( (2)_ __) NR++; else (3)_ __; if(t->lchild!=NULL) (4)__ _; if(t->rchild!=NULL) (5)__ _; }
- (1)voidAA(BiTree*T){if(T){printf("%c",T->data);AA(T->lchild);AA(T->rchild);}}Writethefunctionofthealgorithmabove.(5.0分)
- 1.编写递归算法,将二叉树中所有结点的左、右子树相互交换。 StatusExchangeBiTree(BiTree& T) { BiTree p; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); } return OK; }
- 二叉排序树采用二叉链表存储,结点结构为: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;
- 写递归算法,将二叉树中所有结点的左、右子树相互交换。 Status ExchangeBiTree(BiTree& T) { BiTreep; if(T){ p=T->lchild; T->lchild=T->rchild; T->rchild=p; ExchangeBiTree(T->lchild); __________ } returnOK; }