4 重建二叉樹

2021-10-02 23:31:05 字數 1621 閱讀 3401

題目鏈結

題目描述

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

演算法背景:

前序遍歷遞迴演算法:nlr 先訪問根結點n,再遍歷左子樹l,再遍歷右子樹r。

中序遍歷遞迴演算法:lnr 先訪問左子樹l,再訪問根結點,再遍歷右子樹r。

根據前序遍歷和中序遍歷可以確定二叉樹:

前序序列第乙個結點確定二叉樹的根結點

根據根結點在中序序列中的位置,前部分為根結點的左子樹,後部分分為根結點的右子樹。

再對分割出來的左子樹和右子樹進行遞迴分析。

案例:前序遍歷序列為abcdefghi,中序遍歷序列為bcaedghfi。

由先序序列第乙個**pre[0]在中序序列中找到根節點位置gen**

gen為中心遍歷

gen+1~vinlen

為右子樹

由先序序列**pre[0]**建立根節點

連線左子樹,按照左子樹子串行遞迴(pre_leftvin_left

連線右子樹,按照右子樹子串行遞迴(pre_rightvin_right

返回根節點

時間複雜度o(n),空間複雜度o(n)。

/**

* definition for binary tree

* struct treenode

* };

*/class solution

vector<

int> pre_left, pre_right, vin_left, vin_right;

treenode* root = new treenode

(pre[0]

);int index =0;

for(

int i =

0; i < vinlen;

++i)

}for

(int i =

0; i < index;

++i)

for(

int i = index +

1; i < vinlen;

++i)

root->left =

reconstructbinarytree

(pre_left, vin_left)

; root->right =

reconstructbinarytree

(pre_right, vin_right)

;return root;}}

;

4 重建二叉樹

測試通過 時間限制 1秒 空間限制 32768k 題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。時間限制 1秒空間限制 32768k 本題知識點 查詢 牛客網陣列題目鏈...

4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。例如前序遍歷序列和中序遍歷序列為和,假設結果中無重複的數字。重建二叉樹並返回 1 前序遍歷二叉樹的形式為 根節點,左子樹,右子樹 中序遍歷二叉樹的形式為 左子樹,根節點,右子樹 因此我們需要把前序遍歷的第乙個結果new乙個treenode 出來...

4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。先序序列第乙個數就是根結點而後是左子樹的先序序列和右子樹的先序序列,而中序序列是先是左子樹的中序序列,然後是根結點,最後是右子樹的中...