#include<stdio.h>
#include<stdlib.h>
typedef char DataType;
typedef struct node {
DataType data;
struct node* lchild, * rchild;
}BinTNode;
//生成二叉树
BinTNode* CreateTree(char* str) {
BinTNode* st[100];//指针数组模拟栈
BinTNode* p = NULL;
int top, k, j = 0;
top = -1;//空栈
char ch = str[j];
BinTNode* b = NULL;
while (ch != '\0')
{
switch (ch)
{
case '(':top++; st[top] = p; k = 1; break;
case ')':top--; break;
case ',':k = 2; break;
default:
p = (BinTNode*)malloc(sizeof(BinTNode));
p->data = ch;
p->lchild = p->rchild = NULL;
if (b == NULL)
b = p;
else
{
switch (k)
{
case 1:st[top]->lchild = p; break;
case 2:st[top]->rchild = p; break;
}
}
break;
}
j++; ch = str[j];
}
return b;
}
typedef BinTNode* BinTree;
void preOrder(BinTree bt) {
if (bt != NULL) {
printf("%c", bt->data);
preOrder(bt->lchild);
preOrder(bt->rchild);
}
}
//获取叶子数
int getLeafNodeCount(BinTree bt) {
int sum = 0;
if (bt != NULL) {
if (bt->lchild == NULL && bt->rchild == NULL) {
sum++;
}
sum += getLeafNodeCount(bt->lchild);
sum += getLeafNodeCount(bt->rchild);
}
return sum;
}
void main() {
char str[] = "(A(B(,D(E,F)),C))";
BinTNode* bt = CreateTree(str);
preOrder(bt);
int c=getLeafNodeCount(bt);
printf("%d", c);
}