LeetCode算法刷题——二叉树

LeetCode算法刷题by Python——二叉树

  • 一、重建二叉树
  • 二、树的子结构
  • 三、二叉树的镜像
  • 四、对称的二叉树

今天我们来学习如何构建二叉树,话不多说,直接上题。

一、重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。

假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

示例 1:
LeetCode算法刷题——二叉树_第1张图片
Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Output: [3,9,20,null,null,15,7]
示例 2:
Input: preorder = [-1], inorder = [-1]
Output: [-1]

思路:

  1. 构建二叉树需要首先创建根节点root <- TreeNode(preorder[0])
  2. 我们遍历前序列表,做一个堆栈,用来与中序列表中元素匹配从而正确添加左或右节点。其中,为了匹配中序列表中元素,需要给定一个指针。正常入栈相当于添加左节点操作。
  3. 而当栈顶元素等于指针元素时,说明左树遍历完成,需要向上搜索父节点来添加其右树。下一轮遍历中,在新元素入栈前,需要弹出指针移动时指向的几个元素(相当于向上做搜索),直到栈顶元素重新等于指针元素,此时方可入栈,并向root添加右节点。
  4. 重复步骤2和3直到完成遍历。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
        if not preorder:
            return None
        
        root = TreeNode(preorder[0])
        in_index 

你可能感兴趣的:(LeetCode算法刷题,python,leetcode,二叉树)