力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历

力扣Hot100--94.二叉树的中序遍历、144.二叉树的前序遍历、145.二叉树的后序遍历

要求:给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
递归解法:

python 复制代码
# 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]:
        result = []
        def traversal(node):
            if node is None:
                return 
            traversal(node.left)# 左
            result.append(node.val) # 中
            traversal(node.right) # 右
        traversal(root)
        return result

迭代解法:

python 复制代码
class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        stack = []
        current = root
        while current or stack:
            if current:
                stack.append(current)
                current = current.left
            else:
                current = stack.pop()
                result.append(current.val)
                current = current.right
        return result

要求:给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
递归解法:

python 复制代码
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        def traversal(node):
            if node is None:
                return
            result.append(node.val)
            traversal(node.left)
            traversal(node.right)
        traversal(root)
        return result

迭代解法:

python 复制代码
class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if root is None:  # 一定要检查根节点是否为空
            return []
            
        result = []
        stack = [root]
        while stack:
            node = stack.pop()
            result.append(node.val)  

            if node.right:  # 先右后左
                stack.append(node.right)
            if node.left:   # 左子节点后入栈,会先出栈
                stack.append(node.left)
                

要求:给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
递归解法:

python 复制代码
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        def traversal(node):
            if node is None:
                return 
            traversal(node.left)
            traversal(node.right)
            result.append(node.val)
        traversal(root)
        return result

迭代解法:

python 复制代码
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        if root is None:
            return []
        result = []
        stack = [root]
        while stack:
            node = stack.pop()
            result.append(node.val)
            if node.left:
                stack.append(node.left)
            if node.right:
                stack.append(node.right)
        return result[::-1]
相关推荐
机器学习ing.1 分钟前
U-Net保姆级教程:从原理到医学细胞分割实战(PyTorch版)!
人工智能·pytorch·python·深度学习·机器学习
88号技师7 分钟前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
yzx99101326 分钟前
基于Django的智慧园区管理系统开发全解析
后端·python·django
sunsunyu031 小时前
视频转图片工具
python·音视频
软件开发技术深度爱好者1 小时前
Python类中方法种类介绍
开发语言·python
用户8356290780511 小时前
使用Python合并Word文档:实现高效自动化办公
后端·python
一个不知名程序员www1 小时前
算法学习入门---二分查找(C++)
c++·算法
2301_807997382 小时前
代码随想录-day26
数据结构·c++·算法·leetcode
闭着眼睛学算法2 小时前
【双机位A卷】华为OD笔试之【排序】双机位A-银行插队【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
TL滕2 小时前
从0开始学算法——第一天(认识算法)
数据结构·笔记·学习·算法