劍指 面試題7 重建二叉樹

2021-10-03 23:05:25 字數 1795 閱讀 6935

題目

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

思路:

遞迴建樹,找到根節點在中序中的位置然後遞迴建立左右子樹

build中的root、start、end都是在先序中的位置,比如先序根節點後的第乙個節點就是左子樹的根節點。

總結

注意python和c++在新建物件時的不同,c++需要new,python則是用()。

c++

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

treenode*

build

(vector<

int>

& preorder, vector<

int>

& inorder,

int root,

int start,

int end)

};

python

# definition for a binary tree node.

# class treenode:

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class

solution

:def

buildtree

(self, preorder: list[

int]

, inorder: list[

int])-

> treenode:

defbuild

(preorder: list[

int]

, inorder: list[

int]

, root:

int, start:

int, end :

int)

-> treenode:

if start > end:

return

none

tree = treenode(

) tree.val = preorder[root]

tree.left =

none

tree.right =

none

i = start

while inorder[i]

!= preorder[root]

and i!=end:

i+=1 tree.left = build(preorder, inorder, root+

1, start, i-1)

tree.right = build(preorder, inorder, root+

1+i-start, i+

1, end)

return tree

return build(preorder, inorder,0,

0,len(preorder)-1

)

劍指offer面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。class solution struct treenode reconstruct int l1,int r1,int l2 pr...

劍指Offer 面試題7 重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列和中序遍歷,則重建如圖2.6所示的二叉樹並輸出它的頭節點。分析 前序遍歷 先根,再左,後右 中序遍歷 先左,再根,後右。那麼前序遍歷的第乙個是根,在中序遍歷中找到...

劍指offer 面試題7 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建出二叉樹並輸出他的根節點。二叉樹的定義如下 public static class binarytreenode 在二叉樹的前序遍歷中,第乙個數字總...