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