題目思路:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
遞迴建樹,找到根節點在中序中的位置然後遞迴建立左右子樹
build中的root、start、end都是在先序中的位置,比如先序根節點後的第乙個節點就是左子樹的根節點。
總結:c++注意python和c++在新建物件時的不同,c++需要new,python則是用()。
/**
* 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 在二叉樹的前序遍歷中,第乙個數字總...