题解 | #重建二叉树#
重建二叉树
https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param preOrder int整型一维数组 # @param vinOrder int整型一维数组 # @return TreeNode类 # class Solution: def reConstructBinaryTree(self , preOrder: List[int], vinOrder: List[int]) -> TreeNode: # write code here n = len(preOrder) m = len(vinOrder) if n==0 or m==0: return None root = TreeNode(preOrder[0]) for i in range(m): if preOrder[0]==vinOrder[i]: # 从i处将中序遍历和前序遍历 拆分成左右子树,递归操作 leftpre = preOrder[1:i+1] # 这里的 i+1 是因为要包括完整的子树 leftvin = vinOrder[:i] root.left = self.reConstructBinaryTree(leftpre,leftvin) rightpre = preOrder[i+1:] rightvin = vinOrder[i+1:] # 这里的 i+1 是因为不包括根节点 root.right = self.reConstructBinaryTree(rightpre,rightvin) break return root
- 前中后 序 意思是根节点遍历是从哪里开始
- 注意递归拆分的时候列表边界问题
- Python中是左闭右开
剑指offer刷题笔记 文章被收录于专栏
24秋招剑指offer刷题的笔记