题目
题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
题目解析
这道题与LeetCode的105. Construct Binary Tree from Preorder and Inorder Traversal一模一样。
看到的时候只记得自己做过,按照自己的思路写了下:
# -*- 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 and len(tin)==0:
return root
root_val = pre[0]
root = TreeNode(root_val)
for i in range(len(tin)):
if tin[i]==pre[0]:
if len(pre[1:i+1])>0:
root.left = self.reConstructBinaryTree(pre[1:i+1], tin[0:i])
else:
root.left = None
if len(pre[i+1:])>0:
root.right = self.reConstructBinaryTree(pre[i+1:], tin[i+1:])
else:
root.right = None
return root
看起来有点复杂,看看当年写的。
# -*- 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:
root_val = pre[0]
ind = tin.index(root_val)
root = TreeNode(root_val)
root.left = self.reConstructBinaryTree(pre[1:ind+1], tin[0:ind])
root.right = self.reConstructBinaryTree(pre[ind+1:], tin[ind+1:])
return root
看起来确实优美很多,再来看看时间和内存消耗:
其实差不多哈哈哈哈哈哈
不过做法也差不多,只不过第二种用来python自带的函数