关于树-后序遍历-迭代法

很惭愧 想了半天,还是差一些,我的思路是无限循环了,当时想着如果再多用一个set可能实现太过丑陋,结果查了一下,还真有些是用的.只能说还是不能给自己添加太多的限制条件,毕竟自己也是在学习的新手

通过查询,所了解到的不用多集合来实现迭代遍历的方式:


# 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
from collections import deque
class Solution:
    def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        stk = deque()
        res = []
        if root == None:
            return []

        def traversal(root):
            cur = root
            while stk or cur:
                #先找到最左边的叶子节点,并存储在栈中
                while cur:
                    stk.append(cur)

                    if cur.left:
                        cur = cur.left
                    else:
                        cur = cur.right
                #弹出
                cur = stk.pop()
                res.append(cur.val)
                #如果栈中有节点A且上次所弹出的节点B是这个节点A的左节点,则转到这个节点的右子树上,完美规避了重复遍历的情况
                if stk and stk[-1].left == cur:
                    cur = stk[-1].right
                else:
                    cur = None
            return res
                    


        traversal(root)
        return res
                    
            
posted @ 2025-07-07 21:51  CalvinMax  阅读(21)  评论(0)    收藏  举报