#include "stdio.h"
#include "stdlib.h"
typedef char Elem;
typedef struct Node {
Elem data;
struct Node *lchild;
struct Node *rchild;
}Node,*BiTree;
typedef BiTree ElemType;
//start stack!
typedef struct StackList {
StackList *next;
ElemType data;
}StackList,*LinkStack;
//LinkStack的值赋值成相应的Null;
void push (LinkStack &l,ElemType e) {
LinkStack q = (LinkStack)malloc(sizeof(StackList));
q->data = e;
q->next = l;
l = q;
}
void getTop (LinkStack s,ElemType &e) {
if (s==NULL) {
return ;
}
e = s->data;
}
void toString (LinkStack s) {
if (s == NULL) {
printf("是空的栈");
return;
}
printf("栈中的元素从栈顶到栈尾依次是:\n");
while (s!=NULL) {
printf("%d\n",s->data);
s = s->next;
}
}
void delStack (LinkStack &s) {
free(s);
}
void pop(LinkStack &s,ElemType &e) {
if (s == NULL) {
return;
}
LinkStack l = s;
s = s->next;
e = l->data;
free(l);
}
//end stack!
void initBiTree (BiTree &tree) {
char ch;
BiTree b;
scanf("%c",&ch);
if (ch == '#') {
tree = NULL;
return;
}else {
b = (BiTree)malloc(sizeof(Node));
b->data = ch;
tree = b;
initBiTree(tree->lchild);
initBiTree(tree->rchild);
}
}
//先须遍历
void output (BiTree tree) {
if (tree != NULL) {
printf("%c ",tree->data);
output(tree->lchild);
output(tree->rchild);
}
}
//递归的使用方法是:
int leaf (BiTree root) {
int leftCount;
if (root == NULL) {
leftCount = 0;
}else if (root->lchild == NULL && root->rchild == NULL) {
leftCount = 1;
}else {
leftCount = leaf(root->lchild) + leaf(root->rchild);
}
return leftCount;
}
//用栈来实现
void main () {
Node node;
BiTree temp;
LinkStack stack = NULL;
node.lchild = NULL;
node.rchild = NULL;
BiTree tree = &node;
initBiTree (tree);
push(stack,tree);
printf("%d",leaf(tree));
return;
}
如输入:
abe##f##c##
建立一棵二叉树
a
/ \
b c
/ \
e f
输出为3;表示有三个叶子节点;