順序儲存轉為連結儲存
阿新 • • 發佈:2018-12-05
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; }