二叉树 | 递归遍历 | leecode刷题笔记

发布于:2022-08-10 ⋅ 阅读:(442) ⋅ 点赞:(0)

跟随carl代码随想录刷题
语言:python

二叉树的递归遍历——深度优先

  • 递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数。
  • 三要素:
    • 确定递归函数的参数和返回值
      • def traversal(root: TreeNode): # 前序遍历
    • 确定终止条件
      • if (root == None) return;如果当前遍历的节点为空就返回
    • 确定单层递归的逻辑
      • result.append(root.val) # 中
      • traversal(root.left) # 左
      • traversal(root.right) # 右
  • ⭐️前序遍历中序遍历后序遍历代码的唯一区别就是:中、左、右三个子句的顺序区别。

144. 二叉树的前序遍历

题目:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

完整代码如下

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 1. 初始化一个列表用于后续存放结果
        result = []

        # 2. 定义前序遍历的递归过程
        def traversal(root:TreeNode):
            if root == None:
                return 
            
            result.append(root.val)
            traversal(root.left)
            traversal(root.right)

        # 3. 调用前序遍历的递归函数
        traversal(root)

        # 4. 结果集
        return result

94. 二叉树的中序遍历

题目:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

完整代码如下

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 1. 初始化一个列表用于存放结果集
        result = []

        # 2. 中序遍历的函数
        def traversal(root:TreeNode):
            if root == None:
                return
            
            traversal(root.left)
            result.append(root.val)
            traversal(root.right)

        # 3. 调用中序遍历函数
        traversal(root)

        # 4. 返回结果集
        return result

145. 二叉树的后序遍历

题目:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。

完整代码如下

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 1. 初始化一个列表用于存放结果集
        result = []

        # 2. 中序遍历的函数
        def traversal(root:TreeNode):
            if root == None:
                return
            
            traversal(root.left)
            traversal(root.right)
            result.append(root.val)

        # 3. 调用中序遍历函数
        traversal(root)

        # 4. 返回结果集
        return result
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到