劍指 Offer 07 重建二叉樹

2022-06-21 02:24:10 字數 1365 閱讀 8754

difficulty:中等

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

例如,給出

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下的二叉樹:

3

/ \9 20

/ \

15 7

限制:

0 <= 節點個數 <= 5000

注意:本題與主站 105 題重複:

solution

本題與主站 105 題重複:leetcode 105. 從前序與中序遍歷序列構造二叉樹 - swordspoet -

# 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:

def helper(pre_left, pre_right, in_left, in_right):

if pre_left> pre_right:

return none

pre_root = pre_left

in_root = index[preorder[pre_root]]

root = treenode(preorder[pre_root])

left_subtree_size = in_root - in_left

root.left = helper(pre_left+1, pre_left+left_subtree_size, in_left, in_root-1) # 前序遍歷的第二個元素開始!

root.right = helper(pre_left+1+left_subtree_size, pre_right, in_root+1, in_right)

return root

n = len(preorder)

index =

return helper(0, n-1, 0, n-1)

劍指offer07 重建二叉樹

這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...

劍指 Offer 07 重建二叉樹

難度 中等 題目描述 解題思路 這道題之前做過,但是忘得乾乾淨淨了。現在再做一遍撿一撿,說不定哪次面試就出到了呢 總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。...

劍指 Offer 07 重建二叉樹

首先要懂得前序遍歷和中序遍歷,可以寫出兩個陣列,自己手動來重建一下二叉樹,來看看重建二叉樹是怎麼乙個流程。以圖中給出的二叉樹為例,根據前序遍歷的特點,可知前序遍歷的首尾數字是根節點,比如這個時候根節點數值為3,可以在中序遍歷中第2個位置找到數值3,在3左邊的9為3的左子樹,右邊的15,20,7為右子...