105 從前序與中序遍歷序列構造二叉樹

2021-10-19 10:00:22 字數 1673 閱讀 2780

題目描述

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。

注意:

你可以假設樹中沒有重複的元素。

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

3

/ \9 20

/ \

15 7

題解:

前序遍歷:根節點 左子樹 右子樹

中序遍歷:左子樹 根節點 右子樹

所以,可以根據先序遍歷得到根節點,然後在中序遍歷序列中找到根節點位置pp的左邊就是左子樹的中序遍歷序列,p的右邊就是右子樹的中序遍歷序列。

遞迴生成左右子樹即可。

時間複雜度:o(n

2)

o(n^2)

o(n2)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

treenode*

buildtree

(vector<

int>

& preorder, vector<

int>

& inorder)};

/*記憶體:24.6mb,擊敗:42.04%

*/

可以使用乙個雜湊表記錄中序遍歷序列中每個值的位置,在遞迴建樹過程中省掉遍歷的步驟。

時間複雜度:o(n

)o(n)

o(n)

額外空間複雜度:o(n

)o(n)

o(n)

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/class

solution

treenode*

buildtree

(vector<

int>

& preorder, vector<

int>

& inorder)};

/*記憶體:25mb,擊敗:40.15%

*/

Leetcode 從前序與中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree node...

105 從前序與中序遍歷序列構造二叉樹

如題,根據前序與中序遍歷序列構造二叉樹 整體思路 前序遍歷的第乙個元素,必然是二叉樹的根節點 在中序遍歷中找到前序遍歷第乙個元素的位置 該位置左邊的所有點都是二叉樹的左子樹元素,該位置右邊的所有點都是二叉樹的右子樹元素 思路一 遞迴 字典 由整體思路可以構建子函式用於遞迴,不斷求子樹的左右子樹,直到...

105 從前序與中序遍歷序列構造二叉樹

根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 def buildtree2 preorder,inorder i...