#include<iostream> #include<string.h> using namespace std; int a,b,c;//a、b、c分别表示度为0、1、2的结点个数 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) {//二叉树结点个数的统计 /**************begin************/ /**************end************/ } int main() { char S[100]; while(cin>>S) { if(strcmp(S,"0")==0) break; a=b=c=0; int i=-1; BiTree T; CreateBiTree(T,S,++i); Count(T); cout<<a<<" "<<b<<" "<<c<<endl; } return 0; }
时间: 2023-07-23 15:14:00 浏览: 78
使用include <iostream>时一定要加using namespace std
好的,我理解您需要的是完整的程序代码。以下是完整程序代码:
```c++
#include<iostream>
#include<string.h>
using namespace std;
int a, b, c; // a、b、c 分别表示度为0、1、2的结点个数
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; // 如果当前字符为 0,则结点为空
} else {
T = new BiTNode; // 创建新结点
T->data = S[i]; // 将当前字符赋值给结点数据域
CreateBiTree(T->lchild, S, ++i); // 递归建立左子树
CreateBiTree(T->rchild, S, ++i); // 递归建立右子树
}
}
void Count(BiTree T) { // 二叉树结点个数的统计
if (T == NULL) { // 如果当前结点为空,则返回
return;
}
if (T->lchild == NULL && T->rchild == NULL) { // 如果左右孩子都为空,说明是度为0的结点
a++;
} else if (T->lchild != NULL && T->rchild != NULL) { // 如果左右孩子都不为空,说明是度为2的结点
c++;
} else { // 否则,说明是度为1的结点
b++;
if (T->lchild != NULL) {
Count(T->lchild);
} else {
Count(T->rchild);
}
}
}
int main() {
char S[100];
while (cin >> S) {
if (strcmp(S, "0") == 0) break;
a = b = c = 0;
int i = -1;
BiTree T;
CreateBiTree(T, S, ++i);
Count(T);
cout << a << " " << b << " " << c << endl;
}
return 0;
}
```
这个程序可以读入多个由先序遍历序列表示的二叉树,并分别统计它们的度为0、1、2的结点个数,并输出结果。每个二叉树的先序遍历序列以 0 结尾,程序会自动终止读入并退出。
阅读全文