基于二叉链表的二叉树中所有结点个数的统计
描述
统计二叉树中所有结点的个数。
输入
多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。
输出
每组数据输出一行,每行为二叉树中所有结点的个数。
输入样例 1
abcd00e00f00ig00h00
abd00e00cf00g00
0
输出样例 1
9
7
示例一
#include<iostream>
using namespace std;
int m;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T,char S[],int &i)
{
if(S[i]=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=S[i];
CreateBiTree(T->lchild,S,++i);
CreateBiTree(T->rchild,S,++i);
}
}
void Count(BiTree T)
{
if(T)
{
if(T->lchild&&T->rchild)
m++;
else if(T->lchild||T->rchild)
m++;
else
m++;
Count(T->lchild);
Count(T->rchild);
}
}
int main()
{
char S[100];
while(cin>>S&&S[0]!='0')
{
m=0;
int i=-1;
BiTree T;
CreateBiTree(T,S,++i);
Count(T);
cout<<m<<endl;
}
return 0;
}
示例二、
#include <iostream>
using namespace std;
int n0=0,n1=0,n2=0;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;BiTree temp;
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='0')T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void CreateBiTree(BiTree &T,char ch)
{
if(ch=='0')T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int Traverse(BiTree T)
{
if(T)
{
if(T->lchild!=NULL&&T->rchild!=NULL) n2++;
if(T->lchild!=NULL&&T->rchild==NULL||T->lchild==NULL&&T->rchild!=NULL) n1++;
if(T->lchild==NULL&&T->rchild==NULL) n0++;
Traverse(T->lchild);
Traverse(T->rchild);
}
}
int main()
{
while(1)
{
char ch;
cin>>ch;
if(ch=='0')
{break;}
BiTree T;
CreateBiTree(T,ch);
Traverse(T);
cout<<n0+n1+n2<<endl;
n0=0;n1=0;n2=0;
}
return 0;
}
示例三、
#include <string>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T,string s,int &i)
{
if(s[i]=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=s[i];
CreateBiTree(T->lchild,s,++i);
CreateBiTree(T->rchild,s,++i);
}
}
int Root(BiTree T)
{
if(T==NULL) return 0;
return Root(T->lchild)+Root(T->rchild)+1;
}
int main()
{
string s;
cin>>s;
while(s!="0")
{
BiTree T;
int i=-1;
CreateBiTree(T, s, ++i);
cout<<Root(T)<<endl;;
cin>>s;
}
return 0;
}
示例四、
#include <string>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T,string s,int &i)
{
if(s[i]=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=s[i];
CreateBiTree(T->lchild,s,++i);
CreateBiTree(T->rchild,s,++i);
}
}
int Root(BiTree T)
{
if(T==NULL) return 0;
return Root(T->lchild)+Root(T->rchild)+1;
}
int main()
{
string s;
cin>>s;
while(s!="0")
{
BiTree T;
int i=-1;
CreateBiTree(T, s, ++i);
cout<<Root(T)<<endl;;
cin>>s;
}
return 0;
}
五、
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int a, b, c;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void CreateBiTree(BiTree &T, char S[], int &i)
{
if (S[i] == '0')
T = NULL;
else
{
T = new BiTNode;
T->data = S[i];
CreateBiTree(T->lchild, S, ++i);
CreateBiTree(T->rchild, S, ++i);
}
}
void Count(BiTree T)
{
if (T)
{
if (T->lchild&&T->rchild)
c++;
else if (T->lchild || T->rchild)
b++;
else
a++;
Count(T->lchild);
Count(T->rchild);
}
}
int main()
{
char S[100];
while (cin >> S && S[0] != '0')
{
a = b = c = 0;
int i = -1;
int d = 0;
BiTree T;
CreateBiTree(T, S, ++i);
Count(T);
d=a+b+c;
cout << d << endl;
}
return 0;
}
六、
#include <iostream>
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchlid;
}*BiTree;
void Creat(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='0') T=NULL;
else
{
T = new BiNode;
T->data=ch;
Creat(T->lchild);
Creat(T->rchlid);
}
}
int count(BiTree T)
{
if(T==NULL) return 0;
else return count(T->lchild)+count(T->rchlid)+1;
}
int main()
{
while(1)
{
BiTree T;
Creat(T);
if(T==NULL) break;
cout<<count(T)<<endl;
}
return 0;
}
七、
#include<iostream>
using namespace std;
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T,char s[],int &i)
{
if(s[i]=='0') T=NULL;
else{
T=new BiNode;
T->data=s[i];
CreateBiTree(T->lchild,s,++i);
CreateBiTree(T->rchild,s,++i);
}
}
void Count(BiTree T,int &a,int &b,int &c)
{
if(T==NULL) return;
if(T->lchild&&T->rchild) a++;
else if(T->lchild||T->rchild) b++;
else c++;
Count(T->lchild,a,b,c);
Count(T->rchild,a,b,c);
}
int main()
{
char s[100];
int num;
while(cin>>s&&s[0]!='0')
{
int i=-1;
int a,b,c;
a=b=c=0;
BiTree T;
CreateBiTree(T,s,++i);
Count(T,a,b,c);
num=a+b+c;
cout<<num<<endl;
}
return 0;
}
八、
#include<iostream>
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void Creat(BiTree &T){
char ch;
cin>>ch;
if(ch=='0')
T=NULL;
else{
T=new BiTNode;
T->data=ch;
Creat(T->lchild);
Creat(T->rchild);
}
}
int Count(BiTree &T){
if(T==NULL)
return 0;
else{
return Count(T->lchild)+Count(T->rchild)+1;
}
}
int main(){
BiTree T;
while(1){
Creat(T);
if(T==NULL)
break;
else
cout<<Count(T)<<endl;
}
}
九、
#include <iostream>
using namespace std;
int n=0;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;BiTree temp;
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='0')T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void CreateBiTree(BiTree &T,char ch)
{
if(ch=='0')T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void Traverse(BiTree T){
if(T){
n++;
Traverse(T->lchild);
Traverse(T->rchild);
}
}
int main(){
while(1){
char ch;
cin>>ch;
if('0'==ch) break;
BiTree T;
CreateBiTree(T,ch);
Traverse(T);
cout<<n<<endl;
n=0;
}
return 0;
}
十
//所有节点个数的统计
#include<stdio.h>
#include<iostream>
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchild;
} BiTNode,*BiTree;
void Create(BiTree &T) //先序创建
{
char ch;
cin>>ch;
if(ch=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=ch;
Create(T->lchild);
Create(T->rchild);
}
}
int NodeCount(BiTree T)
{
if(T==NULL)return 0;
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
int main()
{
BiTree T;
while(1)
{
Create(T);
if(T==NULL)
break;
cout<<NodeCount(T)<<endl;
}
return 0;
}
十一、
#include <iostream>
using namespace std;
int n0 = 0, n1 = 0, n2 = 0;
typedef struct BiTNode
{
char data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree; BiTree temp;
void CreateBiTree(BiTree& T)
{
char ch;
cin >> ch;
if (ch == '0')T = NULL;
else
{
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void CreateBiTree(BiTree& T, char ch)
{
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
void Traverse(BiTree T)
{
if (T)
{
if (T->lchild != NULL && T->rchild != NULL) n2++;
if (T->lchild != NULL && T->rchild == NULL || T->lchild == NULL && T->rchild != NULL) n1++;
if (T->lchild == NULL && T->rchild == NULL) n0++;
Traverse(T->lchild);
Traverse(T->rchild);
}
}
int main()
{
while (1)
{
char ch;
cin >> ch;
if (ch == '0')break;
BiTree T;
CreateBiTree(T, ch);
Traverse(T);
cout << n0 + n1 +n2<< endl;
n0 = 0; n1 = 0; n2 = 0;
}
return 0;
}
十二、
#include<iostream>
using namespace std;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreatBiTree(BiTree& T)
{
char ch;
cin>>ch;
if(ch=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=ch;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
int count(BiTree T)
{
if(T==NULL)
return 0;
else
{
int m,n;
m=count(T->lchild);
n=count(T->rchild);
return (1+m+n);
}
}
int main()
{
BiTree T;
while(1)
{
CreatBiTree(T);
if(T==NULL)
break;
cout<<count(T)<<endl;
}
return 0;
}
十三、(Liu建淳)
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
#define OK 1
#define ERROR 0
int num;
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void Count(BiTree &T)
{
if(T)
{
num++;
Count(T->lchild);
Count(T->rchild);
}
}
void Input(BiTree &T,char c[],int &i)
{
if(c[i]=='0')
T=NULL;
else
{
T=new BiTNode;
T->data=c[i];
Input(T->lchild,c,++i);
Input(T->rchild,c,++i);
}
}
int main()
{
char c[1024];
while(cin>>c&&c[0]!='0')
{
num=0;
int i=-1;
BiTree T;
Input(T,c,++i);
Count(T);
cout<<num<<endl;
}
return 0;
}