題目描述:根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
注意:你可以假設樹中沒有重複的元素。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]返回如下的二叉樹:中序遍歷 inorder = [9,3,15,20,7]
3解題思路:9 20
15 7
1.前序遍歷順序,跟->左->右
中序遍歷順序,左->跟->右,
由此可以得知前序的第乙個元素就是根節點。
2.利用得到的根節點下標 index 可以在中序遍歷得到根節點的位置,根節點左邊為左子樹,右邊為右子樹。
3.這個可以得到中序序列遞迴的順序:
root.left =
build
(preorder,?,
?,inorder, instart, index -1)
;root.right =
build
(preorder,?,
?,inorder, index +
1, inend)
;
中序序列根節點左邊的元素為左子樹,可以用index - instart得到元素個數,這樣一來,前序序列的遞迴也可以得到
int leftsize = index - instart;
root.left =
build
(preorder, prestart +
1, prestart + leftsize,
inorder, instart, index -1)
;root.right =
build
(preorder, prestart + leftsize +
1, preend,
inorder, index +
1, inend)
;
**如下:
class
solution
// root 節點對應的值就是前序遍歷陣列的第乙個元素
int rootvalue = preorder[prestart]
;// rootval 在中序遍歷陣列中的索引
int index =0;
for(
int i = instart; i <= inend;
++i)
}int leftsize = index - instart;
// 構造根節點
treenode* root =
newtreenode
(rootvalue)
;// 開始遞迴
root-
>left =
build
(preorder,prestart +
1, prestart + leftsize,
inorder, instart, index -1)
; root-
>right =
build
(preorder, prestart + leftsize +
1, preend,
inorder, index +
1, inend)
;return root;
} treenode*
buildtree
(vector<
int>
& preorder, vector<
int>
& inorder)
};
Leetcode 從前序與中序遍歷序列構造二叉樹
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 definition for a binary tree node...
從前序與中序遍歷序列構造二叉樹
題目描述 if inbegin inend 區間只有乙個結點,就是根結點 區間正常 int rootindex inbegin while rootindex inend 用前序的根劃分中序為兩個子區間 else 遞迴建立左子樹 root left buildtree preorder,pindex...
從前序與中序遍歷序列構造二叉樹
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。注意 你可以假設樹中沒有重複的元素。例如,給出前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7python definition for a binary tree...