统计二叉树度为1的结点个数
#include<iostream>
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)//创建一个二叉树
{
char ch;
cin >> ch;
if(ch=='#') T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int NodeCount ( BiTree T)//统计头结点(递归)
{
if(T==NULL) return 0;//判空
if(T->lchild==NULL&&T->rchild!=NULL)左孩子为空,右孩子不为空
return NodeCount(T->rchild)+1;//递归右孩子当做下一次递归的根节点重复递归。下同
if(T->lchild!=NULL&&T->rchild==NULL)
return NodeCount(T->lchild)+1;
if(T->lchild != NULL && T->rchild != NULL) ;
return NodeCount(T->rchild)+NodeCount(T->lchild);
}
int main(){
BiTree T;
CreateBiTree(T);
printf("%d", NodeCount(T));
return 0;
}
输入样例:
AB#DF##G##C##
输出样例:
1