1.题目:
Problem Description
给你一串扩展二叉树的前序遍历序列,按输入的先后顺序输出该二叉树的叶子节点。
Input
输入的第一行有一个整数N,表示接下去有N组测试数据,每组测试数据占一行,每组测试数据为一串扩展二叉树的前序遍历序列,节点数据类型为字符型,其中'#'标识该节点为空。
Output
输出该二叉树中所有的叶子节点,要求其输出顺序与输入时的相对顺序一致,每个叶子节点占一行,每两组测试数据之间有一个空行。空二叉树不输出任何信息。
Sample Input
2
124#78####35##6##
ABD#G###CE##F##
Sample Output
8
5
6
G
E
F
2.参考代码:
#include <iostream>
using namespace std;
struct BiNode{
char data;
BiNode* lchild,* rchild;
};
class BiTree{
private:
BiNode* root;
BiNode* Creat();
void Release(BiNode* root);
public:
BiTree();
~BiTree();
BiNode* GetRoot(){
return root;
}
void show(BiNode* root);
};
BiNode* BiTree::Creat(){
BiNode* root=new BiNode;
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else{
root->data=ch;
root->lchild=Creat();
root->rchild=Creat();
}
return root;
}
void BiTree::Release(BiNode* root){
if(root){
Release(root->lchild);
Release(root->rchild);
delete root;
}
}
BiTree::BiTree(){
root=Creat();
}
BiTree::~BiTree(){
Release(root);
}
void BiTree::show(BiNode* root){
if(root->lchild==NULL && root->rchild==NULL)
cout<<root->data<<endl;
if(root->lchild)
show(root->lchild);
if(root->rchild)
show(root->rchild);
}
int main()
{
int n;
cin>>n;
bool flag=false;
while(n--)
{
if(flag)
cout<<endl;
flag=true;
BiTree bt;
BiNode* root=bt.GetRoot();
bt.show(root);
}
return 0;
}