设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)__ _;
}
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)__ _;
}
举一反三
- 假设二叉树采用链式方式存储,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;}
- 以下程序段采用先根遍历方法求二叉树的叶子数,请在横线处填充适当的语句(注意:字符之间不要留空白)。 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); } }
- 写递归算法,将二叉树中所有结点的左、右子树相互交换。 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){BiTreep;if(T){p=T->lchild;T->lchild=T->rchild;T->rchild=p;ExchangeBiTree(T->lchild);}returnOK;}