leedcode 二叉树的后序遍历

递归:

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

    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 如果根节点为空,直接返回空的结果列表
        if not root:
            return self.res
        else:
            # 递归遍历左子树
            self.postorderTraversal(root.left)
            # 递归遍历右子树
            self.postorderTraversal(root.right)
            # 将当前节点的值添加到结果列表中
            self.res.append(root.val)

        # 遍历完成后返回结果列表
        return self.res

迭代:

class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        # 初始化结果列表
        res = []
        # 初始化栈
        stack = []

        # 迭代的条件是当前节点不为空或者栈非空
        while root or stack:
            # 将左子树入栈,一直遍历到最左下角的节点
            while root:
                stack.append(root)
                if root.left:
                    root = root.left
                else:
                    root = root.right

            # 弹出栈顶元素,即当前最左下角的节点
            cur = stack.pop()
            # 将该节点的值添加到结果列表中
            res.append(cur.val)

            # 如果栈非空且当前节点是栈顶节点的左子节点,说明还有右子树未遍历
            if stack and stack[-1].left == cur:
                root = stack[-1].right
            else:
                # 否则,将 root 置为 None,继续弹出栈顶节点
                root = None

        # 遍历完成后返回结果列表
        return res

 

posted @ 2024-03-01 16:46  Junior_bond  阅读(10)  评论(0)    收藏  举报