《程式設計之美》 重建二叉樹

2021-07-07 04:44:42 字數 692 閱讀 3419

問題:

已知二叉樹的前序中序遍歷結果,重建二叉樹。

分析與解法:

**:

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...