面試題07 重建二叉樹

2021-10-04 05:50:09 字數 1233 閱讀 5580

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

例如,給出

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

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

返回如下的二叉樹:

3/ \

9  20

/  \

15   7

限制:0 <= 節點個數 <= 5000

前序: 跟節點 左節點 右節點

中序: 左節點 跟節點 右節點

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

self.preorder = preorder

self.dic = {}

length = len(inorder)

for i in range(length):

# 儲存index

self.dic[inorder[i]] = i

return self.recur(0, 0, length - 1)

def recur(self, pre_root, in_left, in_right):

if in_left > in_right:

return

# 在中序遍歷中發現根節點的index

idx = self.dic[self.preorder[pre_root]]

root = treenode(self.preorder[pre_root])

root.left = self.recur(pre_root + 1,in_left, idx - 1)

root.right = self.recur(idx - in_left + pre_root + 1, idx + 1, in_right)

# 右節點 = 跟節點 + 左子樹長度

return root

面試題07 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7限制 0 節點個數 5000 題解 ...

面試題07 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 限制 0 節點個數 5000 利用...

leetcode 面試題07 重建二叉樹

解題思路 1 遞迴構造二叉樹,構建根節點,根據中序遍歷找到左子樹的節點和右子樹的結點,構建左子樹,構建右子樹 definition for a binary tree node.class treenode def init self,x self.val x self.left none self...