劍指offer面試題7 重建二叉樹

2021-10-07 13:32:43 字數 1394 閱讀 1406

前序序列的第乙個節點為根節點。 中序序列的根節點的值在中間,並且左側為其左子樹,右側為其右子樹。

重建演算法思路很清晰,先確定根節點,然後從中序序列中找到根節點的左子樹和右子樹;隨後遞迴重建其左子樹和右子樹即可。

1)在中序序列中尋找根節點的編號,根據編號是否位於序列兩端判斷是否存在左右子樹,並重建。

2)根據兩個序列,重建某棵二叉樹

//

// created by wbzhang on 2020/6/29.

//#include

using namespace std;

struct treenode };

treenode*

constructtree

(vector<

int> preorder,vector<

int> inorder)

// 1.根節點的值

int rootvalue = preorder[0]

; treenode* root = new treenode

(rootvalue)

; root->left = root->right =

null

;// 2.從中序遍歷序列中尋找根節點的值

int inrootind =0;

for(

int i=

0;isize()

;++i)

}// 然後分別根據某一段來重建左子樹和右子樹,再將其連線到根節點即可

// int leftlength = inrootind;

if(inrootind!=0)

else root->left =

null;if

(inrootind != inorder.

size()

-1)else root->right =

null

;return root;

}treenode*

buildtree

(vector<

int>

& preorder, vector<

int>

& inorder)

intmain()

; vector<

int> inorder=

; treenode* root =

buildtree

(preorder,inorder)

;return0;

}

中序序列的特點與上面描述相同。 後序遍歷序列的特點在於根節點在序列最後面,則重建思路與之相同。

劍指offer面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...

劍指Offer 面試題7 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...

劍指offer 面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下 public static class binarytreenode 在二叉樹的前序遍歷中,第乙個數字總...