力扣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]
相关推荐
百***060115 小时前
SpringMVC 请求参数接收
前端·javascript·算法
weixin_4577600015 小时前
Python 数据结构
数据结构·windows·python
一个不知名程序员www16 小时前
算法学习入门---vector(C++)
c++·算法
合作小小程序员小小店16 小时前
web网页,在线%抖音,舆情,线性回归%分析系统demo,基于python+web+echart+nlp+线性回归,训练,数据库mysql
python·自然语言处理·回归·nlp·线性回归
云飞云共享云桌面16 小时前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
q***25116 小时前
Python中的简单爬虫
爬虫·python·信息可视化
最晚的py16 小时前
Python Matplotlib
python·数据分析
柳鲲鹏16 小时前
OpenCV:文件视频防抖,python版
python·opencv·音视频
福尔摩斯张16 小时前
《C 语言指针从入门到精通:全面笔记 + 实战习题深度解析》(超详细)
linux·运维·服务器·c语言·开发语言·c++·算法
橘颂TA16 小时前
【剑斩OFFER】算法的暴力美学——两整数之和
算法·leetcode·职场和发展