#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define maxsize 10
using namespace std;
typedef struct BTNode{
char data;
BTNode *lchild;
BTNode *rchild;
}BTNode;
void create(BTNode *&p) //先序遍历创建二叉树
{
char k;
scanf("%c",&k);
if(k=='#') p=NULL;
else
{
p=(BTNode *)malloc(sizeof(BTNode));
p->data=k;
create(p->lchild);
create(p->rchild);
}
}
int all(BTNode *p) //后序遍历
{
int n1,n2;
if(p==NULL) return 0;
else
{
n1=all(p->lchild);
n2=all(p->rchild);
return n1+n2+1;
}
}
int leaf(BTNode *p) //后序
{
int n1,n2;
if(p==NULL) return 0;
else if(p->lchild==NULL&&p->rchild==NULL) return 1;
else
{
n1=leaf(p->lchild);
n2=leaf(p->rchild);
return n1+n2;
}
}
void leaflink(BTNode *p,BTNode *&head,BTNode *&tail)
{
if(p!=NULL)
{
if(p->lchild==NULL&&p->rchild==NULL)
{
if(head==NULL) head=p;
if(tail==NULL) tail=p;
else {tail->rchild=p;tail=p;}
}
leaflink(p->lchild,head,tail);
leaflink(p->rchild,head,tail);
}
}
int main()
{
BTNode *T=NULL;
create(T);
printf("总节点数:");
printf("%d\n",all(T));
printf("叶节点数:");
printf("%d\n",leaf(T));
BTNode *head=NULL,*tail=NULL;
leaflink(T,head,tail);
printf("叶节点序列:");
while(head!=tail->rchild)
{
printf("%c ",head->data);
head=head->rchild;
}
return 0;
}