思路
首先介绍一下二叉树的遍历方式:
- 前序遍历:先访问根结点,再访问左子结点,最后访问右子结点。
- 中序遍历:先访问左子结点,再访问根结点,最后访问右子结点。
- 后序遍历:先访问左子结点,再访问右子结点,最后访问根结点
本题给出了前序和中序遍历的结果,可以根据图得到,树的root在哪里,前序遍历的第一个就是,接着找到中序遍历root的index,小于index就是左子树,大于index就是右子树。然后就递归计算就可以啦。
代码
# -*- 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) != len(tin) or len(pre) == 0:
return None
if len(pre) == 1:
return TreeNode(pre[0])
key = tin.index(pre[0])
root = TreeNode(pre[0])
root.left = self.reConstructBinaryTree(pre[1:key+1], tin[:key])
root.right = self.reConstructBinaryTree(pre[key+1:], tin[key+1:])
return root