劍指offer 重建二叉樹(c

2021-09-24 10:36:04 字數 1421 閱讀 6411

題目描述

輸入一棵二叉樹前序遍歷和中序遍歷的結果,請重建該二叉樹。

注意:二叉樹中每個節點的值都互不相同;

輸入的前序遍歷和中序遍歷一定合法;

樣例給定:

前序遍歷是:[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...