BJFUOJ:基于二叉链表的二叉树结点个数的统计
易错点:便利二叉树的时候不要忘记 if(t) 这个条件
#include<bits/stdc++.h>
using namespace std;
int node2,node1,node0;
typedef struct BiTnode{
char data;
struct BiTnode *left,*right;
}BiTnode,*BiTree;
void CreatTree(BiTree &t,char s[],int &i){
if(s[i] == '0'){
t = NULL;
}else{
t = new BiTnode;
t->data = s[i];
CreatTree(t->left,s,++i);
CreatTree(t->right,s,++i);
}
}
void NodeNum(BiTree &t){
if(t){
if(t->left != NULL && t->right != NULL){
node2++;
}else if(t->left != NULL && t->right == NULL){
node1++;
}else if(t->left == NULL && t->right != NULL){
node1++;
}
else if(t->left == NULL && t->right == NULL){
node0++;
}
NodeNum(t->left);
NodeNum(t->right);
}
}
int main(){
while(1){
node0 = 0;
node1 = 0;
node2 = 0;
char s[100];
int i = 0;
cin>>s;
if(s[0] == '0'){
break;
}
BiTree t;
CreatTree(t,s,i);
NodeNum(t);
cout<<node0<<" "<<node1<<" "<<node2<<endl;
}
return 0;
}