LeetCode刷题笔记10
105. 从前序与中序遍历序列构造二叉树
题目描述
根据一棵树的前序遍历与中序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
思路:
前序遍历的数组第一个元素即为root的值,根据中序遍历的输入划分左子树和右子树,然后递归即可
代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def buildTree(self, preorder, inorder):
"""
:type preorder: List[int]
:type inorder: List[int]
:rtype: TreeNode
"""
if len(preorder)==0:
return None
#print(preorder)
root=TreeNode(preorder[0])
if len(preorder)==1:
return root
#root=TreeNode(preorder)
index=inorder.index(preorder[0])
if index>0:
pre=preorder[1:index+1]
ino=inorder[:index]
root.left=self.buildTree(pre,ino)
if index<len(preorder)-1:
pre=preorder[index+1:]
ino=inorder[index+1:]
root.right=self.buildTree(pre,ino)
return root
106. 从中序与后序遍历序列构造二叉树
题目描述
根据一棵树的中序遍历与后序遍历构造二叉树。
注意:
你可以假设树中没有重复的元素。
代码
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def buildTree(self, inorder, postorder):
"""
:type inorder: List[int]
:type postorder: List[int]
:rtype: TreeNode
"""
if len(inorder)==0:
return None
root=TreeNode(postorder[-1])
if len(inorder)==1:
return root
idx=inorder.index(postorder[-1])
inorder_left=inorder[:idx]
postorder_left=postorder[:idx]
root.left=self.buildTree(inorder_left,postorder_left)
inorder_right=inorder[idx+1:]
postorder_rigth=postorder[idx:-1]
root.right=self.buildTree(inorder_right,postorder_rigth)
return root