【问题描述】二叉树按照二叉链表的方式存储。编写程序,计算二叉树中叶子结点的数目并输出;编写程序,将二叉树的左右子树进行交换,并输出交换后的二叉树的后序遍历序列。
【输入形式】二叉树的前序遍历序列,空指针的位置输入字符#
【输出形式】
叶子结点的数目
左右子树交换后,后序遍历的序列,空子树的位置输出字符#
【样例输入】
ABE##F##CG###
【样例输出】
3
###GC##F##EBA
#include<iostream>
#include<stdlib.h>
#include<cstring>
using namespace std;
int count=0;
struct BiTNode
{
char data;
BiTNode *LChild;
BiTNode *RChild;
};
void Create(BiTNode *&T)
{
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;
Create(T->LChild);
Create(T->RChild);
}
}
void PreLeaf(BiTNode *T)
{
if(T!=NULL)
{
if(T->LChild==NULL&&T->RChild==NULL)
{
count++;
}
PreLeaf(T->LChild);
PreLeaf(T->RChild);
}
}
void Exchange(BiTNode *T)
{
BiTNode *temp=NULL;
if(T!=NULL)
{
temp=T->RChild;
T->RChild=T->LChild;
T->LChild=temp;
Exchange(T->LChild);
Exchange(T->RChild);
}
else
return;
}
void PostOrder(BiTNode *T)
{
if(T==NULL)
cout<<'#';
if(T!=NULL)
{
PostOrder(T->LChild);
PostOrder(T->RChild);
cout<<T->data;
}
}
int main()
{
BiTNode *T=NULL;
Create(T);
PreLeaf(T);
cout<<count<<endl;
Exchange(T);
PostOrder(T);
}