問題:
已知二叉樹的前序和中序遍歷結果,重建二叉樹。
分析與解法:
**:
typedef
struct node
node, *bitree;
//前序+中序
void repreinbuild(bitree &t,//重建的二叉樹
char *preorder,//前序遍歷序列
char *inorder, //中序遍歷序列
int n) //二叉樹的節點個數
思考:
已知二叉樹的後序和中序遍歷結果,重建二叉樹。解法同上。
已知二叉樹的層序和中序遍歷結果,重建二叉樹。
**:
//後序+中序
void repostinbuild(bitree &t, char *postorder, char *inorder, int n)
擴充套件問題:
如果前序和中序遍歷的字母有重複的,那麼怎麼構造所有可能的解呢?
如何判斷給定的前序遍歷和中序遍歷的結果是合理的?
文章參考以下博文:
重建二叉樹(程式設計之美)
from 程式設計之美3.9 給出前序遍歷和中序遍歷,重新建立二叉樹,後序遍歷輸出。如下 1 include 2 include 3 4using namespace std 56 struct node7 1213 void aftertra node proot 1419 aftertra pr...
程式設計之美 重建二叉樹
問題描述 給出二叉樹先序遍歷和中序遍歷的結果,根據結果重建二叉樹。舉例 例如二叉樹 先序遍歷結果 為 abdcef 中序遍歷結果為 dbaecf,現根據結果重構二叉樹。思路 關鍵需要找到二叉樹每一層的根節點和子樹的長度。例如先序遍歷中根節點必然是第乙個 abdcef 通過中序遍歷可以發現 dbaec...
程式設計之美 3 9重建二叉樹
題目 給定一棵二叉樹,假定每個節點都用唯一的字元表示,具體結構如下 struct node 假設已經有了前序遍歷和中序遍歷結果,希望通過乙個演算法重建這棵樹。給定函式的定義如下 void rebuild char ppreorder,char pinorder,int ntreelen,node p...