leedcode 二叉树的前序遍历

递归法:

class Solution:
    def __init__(self):
        # 初始化一个实例变量 res 用于存储前序遍历结果
        self.res = []

    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 如果根节点存在
        if root:
            # 检查根节点是否为空(这里的判断是多余的,因为前面已经检查了根节点存在)
            if not root:
                return
            else:
                # 将当前节点的值添加到结果列表
                self.res.append(root.val)
                # 递归遍历左子树
                self.preorderTraversal(root.left)
                # 递归遍历右子树
                self.preorderTraversal(root.right)
            # 返回最终的前序遍历结果
            return self.res
        else:
            # 如果根节点不存在,直接返回空列表
            return self.res

迭代法(用栈来模拟递归的实现):

class Solution:
    def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 如果根节点不存在,返回空列表
        if not root:
            return []

        # 初始化栈,将根节点加入栈
        stack = [root]
        # 初始化结果列表
        res = []

        # 遍历栈直到为空
        while stack:
            # 弹出栈顶元素
            cur = stack.pop()
            # 将当前节点的值添加到结果列表
            res.append(cur.val)

            # 注意:这里先添加右孩子,因为栈是后进先出,所以我们希望左孩子先被处理(前序遍历的顺序)
            if cur.right:
                stack.append(cur.right)
            if cur.left:
                stack.append(cur.left)

        # 返回最终的前序遍历结果
        return res

 

posted @ 2024-02-29 18:40  Junior_bond  阅读(9)  评论(0)    收藏  举报