#include "stdio.h"
#include<stdlib.h>
typedef struct Ttree
{int data;
struct Ttreelchild;
struct Ttreerchild;
}tree;
typedef struct stack
{tree *data[100];
int top;
}stack;
tree*create(tree *T)
{T->data=1;
tree n1=NULL;
tree n2=NULL;
n1=(tree)malloc(sizeof(tree));
n2=(tree)malloc(sizeof(tree));
n1->data=2;
n2->data=3;
T->lchild=n1;
T->rchild=n2;
tree n3=NULL;
n3=(tree)malloc(sizeof(tree));
n3->data=4;
n1->lchild=n3;
tree n4=NULL;
n4=(tree)malloc(sizeof(tree));
n4->data=5;
n1->rchild=n4;
tree n5=NULL;
n5=(tree)malloc(sizeof(tree));
n5->data=6;
n2->lchild=n5;
tree n6=NULL;
n6=(tree)malloc(sizeof(tree));
n6->data=7;
n2->rchild=n6;
tree n7=NULL;
n7=(tree)malloc(sizeof(tree));
n7->data=8;
n6->lchild=n7;
tree n8=NULL;
n8=(tree)malloc(sizeof(tree));
n8->data=9;
n2->rchild=n8;
return T;
}
void initstack(stack *L)
{L->top=-1;
}
tree*count(tree *T,stack *L)
{tree *a[100];
int h,i;
h=0;
i=0;
tree p=NULL;
p=(tree)malloc(sizeof(tree));
p=T;
L->top++;
L->data[L->top]=p;
while(L->top!=-1)
{
while(p->lchild!=NULL)
{L->top++;
L->data[L->top]=p->lchild;
p=p->lchild;
}
while(p!=T&&L->top!=-1)
{if(p->lchild==NULL)
{ if(p->lchild==NULL)
{
a[i++]=L->data[L->top];
L->top--;
h++;}
else {
L->top++;
L->data[L->top]=p->lchild;
p=p->lchild;
}}
if(L->top!=-1)
{if(p->rchild==NULL&&L->top!=-1)
{
p=L->data[L->top];
a[i++]=L->data[L->top];
L->top--;
h++;
}
else {p=p->rchild;
L->top++;
L->data[L->top]=p;
while(p->lchild!=NULL)
{L->top++;
L->data[L->top]=p->lchild;
p=p->lchild;
}
}
}
}
p=p->rchild;
L->top++;
L->data[L->top]=p;
}
T->data=h;
return T;
}
int main()
{int h;
stack L;
tree T;
T=(tree)malloc(sizeof(tree));
T=create(T);
initstack(&L);
T=count(T,&L);
printf("输出二叉树结点的个数:%d",T->data);
return 0;
}