您的位置:首页 > 编程语言 > Python开发

剑指offer:重建二叉树(Python)

2018-03-06 10:40 260 查看

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。(事实上,返回的是二叉树的根节点)

思路

前序遍历=“根左右”,中序遍历=“左根右”。

由前序遍历序列获得根节点及其位置——>由根节点和对应位置,分别获得:左子树的前序遍历序列和中序遍历序列,以及右子树的前序遍历序列和中序遍历序列——>分别递归左子树的前中序列,右子树的前中序列。

Python代码

class Solution:
def getBSTwithPreTin(self, pre, tin):
if len(pre)==0 | len(tin)==0:
return None

root = TreeNode(pre[0])
for order,item in enumerate(tin):
if root .val == item:
root.left = self.getBSTwithPreTin(pre[1:order+1], tin[:order])
root.right = self.getBSTwithPreTin(pre[order+1:], tin[order+1:])
return root

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None

if __name__ == '__main__':
solution = Solution()
preorder_seq = [1,2,4,7,3,5,6,8]
midorder_seq = [4,7,2,1,5,3,8,6]
treeRoot = solution.getBSTwithPreTin(preorder_seq, midorder_seq)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: