600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

【LeetCode系列】从中序与后序遍历序列构造二叉树 从前序与中序遍历序列构造二叉树...

时间:2020-11-06 06:53:15

相关推荐

【LeetCode系列】从中序与后序遍历序列构造二叉树  从前序与中序遍历序列构造二叉树...

关注上方深度学习技术前沿,选择“星标公众号”

资源干货,第一时间送达!

105. 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。

注意:

- 你可以假设树中没有重复的元素。

例如,输入:

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

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

输出:[3,9,20,null,null,15,7]

返回如下的二叉树:

3/ \9 20/ \15 7

前序遍历是根左右,因此preorder第一个元素一定是整个树的根。由于题目说明了没有重复元素,因此我们可以通过preorder[0]去inorder找到根在inorder中的索引pos。

而由于中序遍历是左根右,我们容易找到pos左边的都是左子树,pos右边都是右子树。

Python实现:

# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = NoneclassSolution:defbuildTree(self, preorder: List[int], inorder: List[int])-> TreeNode:iflen(preorder) == 0:returnNoneeliflen(preorder) == 1:returnTreeNode(preorder[0])else:root = TreeNode(preorder[0])#锁定中序遍历中根节点的位置pos = inorder.index(preorder[0])root.left = self.buildTree(preorder[1:pos+1], inorder[:pos])root.right = self.buildTree(preorder[pos+1:], inorder[pos+1:])returnroot

106. 从中序与后序遍历序列构造二叉树

根据一棵树的中序遍历与后序遍历构造二叉树。

注意:

你可以假设树中没有重复的元素。

例如,给出

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

后序遍历 postorder = [9,15,7,20,3]

返回如下的二叉树:

3/ \9 20/ \15 7

思路和上题类似:

后序遍历是左右根,因此postorder最后一个元素一定是整个树的根。由于题目说明了没有重复元素,因此我们可以通过postorder[-1]去inorder找到根在inorder中的索引pos。

而由于中序遍历是左根右,我们容易找到pos左边的都是左子树,pos右边都是右子树。

Python代码实现:

# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = NoneclassSolution:defbuildTree(self, inorder:List[int], postorder:List[int])-> TreeNode:if(len(postorder)==0):returnNoneelif(len(postorder)==1):returnTreeNode(postorder[0])else:root = TreeNode(postorder[-1])pos = inorder.index(postorder[-1])root.left = self.buildTree(inorder[:pos], postorder[:pos])root.right = self.buildTree(inorder[pos+1:], postorder[pos:-1])returnroot

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。