Leetcode刷题笔记14:二叉树1

108 阅读2分钟

导语

leetcode刷题笔记记录,本篇博客记录二叉树部分的题目,主要题目包括:

知识点

二叉树

二叉树是计算机科学中的一个基本的数据结构,它是由节点组成的,其中每个节点最多有两个子节点,通常被称为“左子节点”和“右子节点”。

二叉树的几个特点:

  1. 每个节点有零个或多个子节点。
  2. 每个节点最多有两个子节点。
  3. 通常,左子节点的值小于其父节点,而右子节点的值大于其父节点(这在二叉搜索树中特别明显,但不是普通二叉树的必要条件)。

二叉树的Python代码实现

下面是一个简单的Python代码,描述了一个二叉树和它的插入方法:

class Node:
    def __init__(self, key):
        self.left = None
        self.right = None
        self.val = key

二叉树的种类

解题过程中⼆叉树有两种主要的形式:满⼆叉树和完全⼆叉树。

满⼆叉树

满⼆叉树:如果⼀棵⼆叉树只有度为0的结点和度为2的结点,并且度为0的结点在同⼀层 上,则这棵⼆叉树为满⼆叉树。

完全⼆叉树

完全⼆叉树的定义如下:在完全⼆叉树中,除了最底层节点可能没填满外,其余每层节点数 都达到最⼤值,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置。若最底层为第 h 层,则该层包含 11 ~2h1 2^h -1 个节点。

二叉树的遍历

二叉树的遍历是算法和数据结构中的核心概念。以下是四种基本的二叉树遍历方法:

  1. 前序遍历(Preorder):根 -> 左 -> 右
  2. 中序遍历(Inorder):左 -> 根 -> 右
  3. 后序遍历(Postorder):左 -> 右 -> 根
  4. 层序遍历(Level Order):按树的层次从上到下、从左到右

Leetcode 144/94/145 二叉树的前序、中序和后序遍历

使用递归可以很方便的解决这个遍历的问题,主要的细节在于返回“中”操作的顺序,下面是对应的Python代码

前序遍历

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        left = self.preorderTraversal(root.left)
        right = self.preorderTraversal(root.right)

        return [root.val] + left + right

中序遍历

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        left = self.inorderTraversal(root.left)
        right = self.inorderTraversal(root.right)

        return left + [root.val] + right

后序遍历

class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        left = self.postorderTraversal(root.left)
        right = self.postorderTraversal(root.right)

        return left + right + [root.val]