題目描述
輸入一棵二叉樹前序遍歷和中序遍歷的結果,請重建該二叉樹。
注意:二叉樹中每個節點的值都互不相同;
輸入的前序遍歷和中序遍歷一定合法;
樣例給定:
前序遍歷是:[3, 9, 20, 15, 7]
中序遍歷是:[9, 3, 15, 20, 7]
返回:[3, 9, 20, null, null, 15, 7, null, null, null, null]
思路先序遍歷陣列中的第乙個數為根節點的值,然後從中序遍歷的陣列中找到這個值所在位置,則左邊的數就是左子樹的元素,右邊的數就是右子樹的元素,分別遞迴得到左子樹和右子樹。
class
solution
int value = pre[0]
; treenode* root =
newtreenode
(value);if
(pre.
size()
==1)//在中序遍歷中找出根節點所在位置
auto pos =
find
(in.
begin()
, in.
end(
), value)
;//如果沒找到,則返回null
if(pos == in.
end())
int leftsize = pos - in.
begin()
;int rightsize = in.
end(
)- pos -1;
root-
>left =
buildtree
(vector<
int>
(pre.
begin()
+1, pre.
begin()
+1+ leftsize)
, vector<
int>
(in.
begin()
, in.
begin()
+ leftsize));
root-
>right =
buildtree
(vector<
int>
(pre.
begin()
+1+ leftsize, pre.
end())
, vector<
int>
(in.
begin()
+ leftsize +
1, in.
end())
);return root;}}
;
劍指offer 重建二叉樹 C
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 1.關於二叉樹遍歷 前序 中序 後序 的講解,請見leetcode解釋。2.給定了前序序列 遍歷順序為根左右 那第乙個元...
劍指offer 重建二叉樹C
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。definition for binary tree 1 struct treenode class solution 求右子樹的中...
劍指offer 重建二叉樹
重建二叉樹2.cpp 定義控制台應用程式的入口點。題目描述 輸入乙個二叉樹的前序遍歷和中序遍歷,輸出這顆二叉樹 思路 前序遍歷的第乙個節點一定是這個二叉樹的根節點,這個節點將二叉樹分為左右子樹兩個部分,然後進行遞迴求解 include stdafx.h include vector using na...