关于树-后序遍历-迭代法
很惭愧 想了半天,还是差一些,我的思路是无限循环了,当时想着如果再多用一个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

浙公网安备 33010602011771号