题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回构造的TreeNode根节点 def reConstructBinaryTree(self, pre, tin): # write code here if len(pre)==0: return None elif len(pre)==1: return TreeNode(pre[0]) else: ans=TreeNode(pre[0]) ans.left=self.reConstructBinaryTree(pre[1:tin.index(pre[0])+1],tin[:tin.index(pre[0])]) ans.right=self.reConstructBinaryTree(pre[tin.index(pre[0])+1:],tin[tin.index(pre[0])+1:]) return ans
思路:1、从前序遍历中找到根节点,并找到根节点在中序遍历的下标i
2、按照i的值分割前序和中序
3、递归1~2
注意问题:1:if 中符号==
2:切片用[]
另一种写法:
链接:https://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
来源:牛客网
class
Solution:
def reConstructBinaryTree(self, pre, tin):
if
not pre or not tin:
return
None
root = TreeNode(pre.pop(
0
))
index = tin.index(root.val)
root.left = self.reConstructBinaryTree(pre, tin[:index])
root.right = self.reConstructBinaryTree(pre, tin[index +
1
:])
return
root
self.reConstructbinaryTree(Pre,tin[])
标黄部分不理解。
之后补python和树的知识,基础太差了。