leetcode94.二叉树的中序遍历 Python

这篇博客介绍了如何通过递归和迭代两种方法实现二叉树的中序遍历。首先解释了中序遍历的顺序(左根右),接着详细阐述了递归方法,通过深度优先遍历,使用系统栈空间。然后重点讲解了迭代方法,利用栈结构手动模拟遍历过程,从根节点开始,不断向左子树压栈,直到为空,再依次出栈并遍历右子树,直至所有节点和栈为空。示例代码展示了这两种方法的具体实现,并给出了一个具体的二叉树例子作为输出结果。
摘要由CSDN通过智能技术生成

题目:

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

示例:

输入:root = [1,null,2,3]
输出:[1,3,2]

思路:

方法1,递归,中序遍历顺序就是左根右,使用递归函数进行深度优先遍历,从根节点开始先调用递归函数遍历左子树,然后是根节点,在结果数组中加入根节点的值,然后调用递归函数遍历右子树,终止条件就是节点为空,最后返回结果数组。
方法2,迭代

递归方法是在系统中使用栈空间实现遍历,这里直接利用栈和迭代进行遍历,栈顶弹出的元素就是下一个要加入结果中的元素,按这个思想弹出元素,初始化空栈,遍历二叉树,从根节点出发,不断向左子树遍历,将元素压入栈中,直到为空,然后出栈开始遍历元素,将出栈的元素放在结果列表中,开始遍历右子树,如果为空就继续出栈,将出栈元素放到结果里,遍历上一层节点的右子树,若非空就压入栈中,若为空就继续将栈顶元素出栈,直到遍历完二叉树的节点和栈中的元素,返回结果列表。

注意:结果列表中加入的节点元素的值,而不是节点本身。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        # 递归,深度优先遍历,递归调用栈来实现
        # res = []
        # def dfs(root):
        #     if not root:
        #         return 
        #     dfs(root.left)
        #     res.append(root.val)
        #     dfs(root.right)
        # dfs(root)
        # return res 
        # 迭代,使用栈结构实现操作
        res = []
        stack = []
        while stack or root:# 当都为空的时候才遍历完成
            if root:
                stack.append(root)
                root = root.left
            else:
                temp = stack.pop()
                res.append(temp.val)
                root = temp.right
        return res 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值