演算法筆記-問題 D: 二叉樹遍歷
阿新 • • 發佈:2021-01-24
問題 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; }