导语
leetcode刷题笔记记录,本篇博客记录二叉树部分的题目,主要题目包括:
知识点
二叉树
二叉树是计算机科学中的一个基本的数据结构,它是由节点组成的,其中每个节点最多有两个子节点,通常被称为“左子节点”和“右子节点”。
二叉树的几个特点:
- 每个节点有零个或多个子节点。
- 每个节点最多有两个子节点。
- 通常,左子节点的值小于其父节点,而右子节点的值大于其父节点(这在二叉搜索树中特别明显,但不是普通二叉树的必要条件)。
二叉树的Python代码实现:
下面是一个简单的Python代码,描述了一个二叉树和它的插入方法:
class Node:
def __init__(self, key):
self.left = None
self.right = None
self.val = key
二叉树的种类
解题过程中⼆叉树有两种主要的形式:满⼆叉树和完全⼆叉树。
满⼆叉树
满⼆叉树:如果⼀棵⼆叉树只有度为0的结点和度为2的结点,并且度为0的结点在同⼀层 上,则这棵⼆叉树为满⼆叉树。
完全⼆叉树
完全⼆叉树的定义如下:在完全⼆叉树中,除了最底层节点可能没填满外,其余每层节点数 都达到最⼤值,并且最下⾯⼀层的节点都集中在该层最左边的若⼲位置。若最底层为第 h 层,则该层包含 ~ 个节点。
二叉树的遍历
二叉树的遍历是算法和数据结构中的核心概念。以下是四种基本的二叉树遍历方法:
- 前序遍历(Preorder):根 -> 左 -> 右
- 中序遍历(Inorder):左 -> 根 -> 右
- 后序遍历(Postorder):左 -> 右 -> 根
- 层序遍历(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]