Problem Description
问题描述:设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,建立该二叉链表,要求将该二叉树的二叉链表存储结构转换为顺序存储结构,并输出各数组元素,空二叉树用'#'表示。
Input
第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列,每组数据的长度不会超过50。
Output
输出顺序存储表示时的各数组元素。
Sample Input
3 AB#D##C## ABD##E##C#F## #
Sample Output
ABC#D ABCDE#F #
#include<iostream>
#include<stdio.h>
#include<string.h>
const int MAXSIZE=51;
using namespace std;
class Tree {
public:
Tree() {
memset(nodeArray,'#',sizeof(nodeArray));
len=0;
root=creat_1(0);
}
~Tree() {
Release(root);
}
void print() {
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;
char nodeArray[MAXSIZE];
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 Release(BiTree bt) {
if(bt) {
Release(bt->lchild);
Release(bt->rchild);
delete bt;
bt=NULL;
}
}
};
int main() {
int n;
while(cin>>n) {
while(n--) {
Tree t;
t.show();
}
}
return 0;
}