Problem Description
设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用顺序存储表示。现输入其数组各元素值(空二叉树用'#'表示),建立该二叉树,要求将该二叉树的顺序存储结构转换为二叉链表存储结构,并输出其前序遍历序列。
Input
第一行为一个整数n,表示以下有n组数据,每组数据占一行,为其数组各元素值(空二叉树用'#'表示),每组数据长度不超过50。
Output
输出该二叉树的前序遍历序列,空二叉树则不输出任何信息。
Sample Input
2 ABC#D ABCDE#F
Sample Output
ABDC ABDECF
#include<iostream>
#include<stdio.h>
#include<string.h>
const int MAXSIZE=51;
using namespace std;
char nodeArray[51];
class Tree {
public:
Tree(int l) {
len=l;
creat_2(root,0);
}
~Tree() {
Release(root);
}
void print() {
if(root){
print(root);
cout<<endl;
}
}
void show() {
if(!len&&root==NULL) {
cout<<'#'<<endl;
} else{
for(int i=0; i<=len; i++) {
cout<<nodeArray[i];
}
cout<<endl;
}
}
private:
typedef struct BiNode {
char data;
struct BiNode* lchild,*rchild;
BiNode() {
lchild=rchild=NULL;
}
} BiNode,*BiTree;
int len;
BiTree root;
void print(BiTree t) {
if(t) {
cout<<t->data;
print(t->lchild);
print(t->rchild);
}
}
int max(int a,int b){
return a>b?a:b;
}
BiTree creat_1(int start) {
char ch;
cin>>ch;
BiTree bt;
if(ch=='#') {
bt=NULL;
} else {
len=max(len,start);
bt=new BiNode;
bt->data=ch;
nodeArray[start]=ch;
bt->lchild=creat_1(start*2+1);
bt->rchild=creat_1(start*2+2);
}
return bt;
}
void creat_2(BiNode* & bt,int start){
if(nodeArray[start]=='#'||start>=len){bt=NULL;}
else{
bt=new BiNode;
bt->data=nodeArray[start];
creat_2(bt->lchild,2*start+1);
creat_2(bt->rchild,2*start+2);
}
}
void Release(BiTree bt) {
if(bt) {
Release(bt->lchild);
Release(bt->rchild);
delete bt;
bt=NULL;
}
}
};
int main() {
// freopen("1.txt","r",stdin);
int n;
while(cin>>n) {
while(n--) {
cin>>nodeArray;
int len=strlen(nodeArray);
Tree t(len);
t.print();
}
}
return 0;
}