1. 程式人生 > 其它 >演算法筆記-問題 D: 二叉樹遍歷

演算法筆記-問題 D: 二叉樹遍歷

技術標籤:二叉樹演算法

問題 D: 二叉樹遍歷

題目描述

編一個程式,讀入使用者輸入的一串先序遍歷字串,根據此字串建立一個二叉樹(以指標方式儲存)。
例如如下的先序遍歷字串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字元代表空樹。建立起此二叉樹以後,再對二叉樹進行中序遍歷,輸出遍歷結果。

輸入

輸入包括1行字串,長度不超過100。

輸出

可能有多組測試資料,對於每組資料,
輸出將輸入字串建立二叉樹後中序遍歷的序列,每個字元後面都有一個空格。
每個輸出結果佔一行。

樣例輸入Copy

a#b#cdef#####
a##

樣例輸出 Copy

a b f e d c 
a 

程式碼:

#include <bits/stdc++.h>

using namespace std;
const int maxn = 50;
int i;
struct node{
    char data;
    node* lchild;
    node* rchild;
}BiTree;
char pre[maxn];

/*重建*/
node* restore(){
    if(pre[i]=='#'){
        i++;
        return NULL;
    }
    node* root = new node;
    root->data = pre[i];
    i++;
    root->lchild = restore();
    root->rchild = restore();
    return root;
}

/*中序*/
void inorder(node* root){
    if(root == NULL){
        return;
    }
    inorder(root->lchild);
    printf("%c ", root->data);
    inorder(root->rchild);
}

int main(){
    while(scanf("%s", pre)!=EOF){
        i = 0;
        node* root = new node;
        root = restore();
        inorder(root);
        printf("\n");
        memset(pre, ' ', sizeof(pre));
    }
	return 0;
}