SDUT原题链接:点击打开链接
所谓的叶子就是没有孩子的节点,只需要一次任意序列的遍历然后根据此时节点的左孩子和右孩子的值是不是NULL就可以判定是不是叶子i,算是整个树里最简单最水的一个
#include <iostream>
#include <stdlib.h>
using namespace std;
char ch[100];
int cnt, num;
struct node
{
char data;
struct node * lchild;
struct node * rchild;
};
struct node * creat()<span style="white-space:pre"> </span>//先序建立一棵树
{
struct node * root;
if(ch[++cnt] == ',')
root = NULL;
else
{
root = (struct node * )malloc(sizeof(struct node));
root->data = ch[cnt];
root->lchild = creat();
root->rchild = creat();
}
return root;
};
void yezi(struct node * root)<span style="white-space:pre"> </span>//先序遍历判断叶子
{
if(root)
{
if(root->lchild == NULL && root->rchild == NULL)
num++;
yezi(root->lchild);
yezi(root->rchild);
}
}
int main()
{
struct node * root;
while(cin >> ch)
{
cnt = -1;
num = 0;<span style="white-space:pre"> </span>//初始化
root = creat();
yezi(root);
cout << num << endl;
}
return 0;
}