劍指offer 重建二叉樹

2021-08-25 02:38:53 字數 1068 閱讀 6530

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

解題思路:

根據前序遍歷(根-左-右)和中序遍歷(左-根-右)的特點,該題可以分為以下步驟:

1、根據前序遍歷找到根節點

2、在中序遍歷中找到根節點,由這個節點所在位置將陣列分為左子樹和右子樹

3、建立乙個新的樹,並將根節點的值賦給它的根節點

4、將左、右子樹分別當做乙個新的樹並儲存起來,然後分別對左子樹和右子樹重複上述操作

整個過程實際上就是乙個遞迴呼叫的過程

注意事項:

1、該題給的預設函式引數是vector,故求其長度時不能用pre.length,而應該用pre.size();

2、給出的函式是treenode* 型別,故新建的樹的型別應該與其相同,返回時才不會出現錯誤

/*** definition for binary tree

* struct treenode

* };

*/class solution

//在前序遍歷pre中查詢根節點,並確定其在vin的位置 

size_t index=0;

for(;index <=vin.size(); index++)

} //建立新的根節點,並為其賦值

treenode* node=new treenode(pre[0]);

//根據中序遍歷將根節點左右兩側一分為二,根節點的左側為左子樹,右側為右子樹

vectorpl,pr;

vectorvl,vr;

//將前序、中序中根節點的左右子樹記錄下來

for(size_t j=0; jleft=reconstructbinarytree(pl,vl);

//遞迴呼叫構建當前節點的右子樹

node->right=reconstructbinarytree(pr,vr); 

return node;}};

劍指offer 重建二叉樹

重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...

《劍指offer》重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,則重建二叉樹並返回。輸入乙個樹的前序和中序,例如輸入前序遍歷序列和中序遍歷序列 根據輸入的前序和中序,重建乙個該二叉樹,並返回該樹的根節點。definition for binary...

劍指offer 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree struct treenode class solution if ...