劍指 面試題 07 重建二叉樹

2021-10-04 01:33:53 字數 841 閱讀 7163

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

例如,給出

前序遍歷 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 本題...