輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/ \9 20
/ \
15 7
限制:
0 <= 節點個數 <= 5000
解題思路
根據前序序列的第乙個元素建立根結點;
在中序序列中找到該元素,確定根結點的左右子樹的中序序列;
在前序序列中確定左右子樹的前序序列;
由左子樹的前序序列和中序序列建立左子樹;
由右子樹的前序序列和中序序列建立右子樹。
def
buildtree
(preorder, inorder):if
not preorder:
return
none
loc = inorder.index(preorder[0]
) root = treenode(preorder[0]
) root.left = buildtree(preorder[
1: loc +1]
, inorder[
: loc]
) root.right = buildtree(preorder[loc +1:
], inorder[loc +1:
])return root
劍指offer 面試題07 重建二叉樹
6.24更新 class solution treenode rebuild int prel,int prer,int inl,int inr int numleft k inl 左節點個數 treenode root newtreenode in k 新建乙個節點作為其根節點 root left...
劍指offer 面試題07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 include include using namespace std struct t...
《劍指offer》 面試題07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 限制 0 節點個數 5000 本題...