面試題07 重建二叉樹

2021-10-03 23:44:31 字數 1383 閱讀 9406

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

例如,給出

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

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

返回如下的二叉樹:

3

/ \9 20

/ \

15 7

限制:

0 <= 節點個數 <= 5000

題解:我們需要根據這兩個序列劃分,我們知道前序遍歷的第乙個節點為頭結點,在這了頭結點為[3],我們在中序遍歷中找到[3]所在的位置,可以看到位於中序遍歷的第二個位置,那麼我們可以確定[3]的左子樹的節點包含[9],右子樹節點包含[20,25,7],一直這樣劃分下去,直到陣列為空,在返回節點.

# definition for a binary tree node.

# class treenode(object):

# def __init__(self, x):

# self.val = x

# self.left = none

# self.right = none

class solution(object):

def buildtree(self, preorder, inorder):

""":type preorder: list[int]

:type inorder: list[int]

:rtype: treenode

"""if len(preorder) == 0:

return none

#建立當前節點

node = treenode(preorder[0])

#在中序遍歷中查詢第乙個節點的位置

root_index=inorder.index(preorder[0])

# 劃分左右子樹

left_pre_son=preorder[1:root_index+1]

left_mind_son=inorder[:root_index]

right_pre_son=preorder[root_index+1:]

right_mid_son=inorder[root_index+1:]

#遍歷二叉樹

node.left=self.buildtree(left_pre_son,left_mind_son)

node.right=self.buildtree(right_pre_son,right_mid_son)

return node

面試題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...