《剑指office》第四题 重建二叉树(Python)

mac2026-08-11  7

题目描述

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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

思路:

A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。

所以,前序遍历的第一个值一定是根节点

           中序遍历中根节点的左边是左子树,根节点的右边是右子树

# -*- 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 root_data = TreeNode(pre[0]) i=tin.index(pre[0]) root_data.left = self.reConstructBinaryTree(pre[1:1+i],tin[:i]) root_data.right = self.reConstructBinaryTree(pre[1+i:],tin[i+1:]) return root_data

 首先判断二叉树是否为空,进行长度的判断即可。还要注意将根定义成节点的形式。在进行本函数的递归调用时,需要在本函数名前面加上self

 

 

最新回复(0)