1. 程式人生 > >順序儲存轉為連結儲存

順序儲存轉為連結儲存

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;
}