leetcode刷题笔记之94. 二叉树的中序遍历

94. 二叉树的中序遍历

题目地址
描述为中序遍历一个二叉树
对树这块不太熟悉,所以直接参考了depseek。

class Solution(object):
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        result = []
        self.inorder(root, result)
        return result
    
    def inorder(self, node, result):
        if not node:
            return
        self.inorder(node.left, result)
        result.append(node.val) 
        self.inorder(node.right, result)

总结心得:
学习了树的使用,包括左右节点,val获取值等
学习了递归的使用,python中递归一定要用self.因为调用的是类里的一个成语函数,所以必须加self.,不然编译器会在全文检索导致出错。还学习了简单的递归实现,包括设置结束的判定,在本题中则为线遍历完左节点后再遍历右节点,直到没有节点为止。
学习了树的遍历方式:

  1. 前序遍历(Preorder Traversal)
    顺序:根节点 → 左子树 → 右子树
  2. 中序遍历(Inorder Traversal)
    顺序:左子树 → 根节点 → 右子树
  3. 后序遍历(Postorder Traversal)
    顺序:左子树 → 右子树 → 根节点
  4. 层序遍历(Level Order Traversal)
    顺序:逐层从左到右访问节点

同时还有一种通过迭代实现的方法

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        stack = []
        current = root
        
        while current or stack:
            # 遍历到最左节点
            while current:
                stack.append(current)
                current = current.left
            # 弹出栈顶元素并访问
            current = stack.pop()
            result.append(current.val)
            # 转向右子树
            current = current.right
        
        return result

迭代方法使用栈来模拟递归的过程,显式地维护调用栈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值