輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 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...