二叉树的后序遍历
解法: 栈
与二叉树的前序遍历和中序遍历相同,采用向左深度遍历的方式。
但与之两者不同的是,后序遍历为 左-右-根 。也就意味着访问完左子树后,退栈的节点为根节点,不能对其退栈,因为后序遍历为 左-右-根 ,所以当该根节点没有右子树时或右子树已经访问时,才对其退栈。
因此,做法与前序中序类似,但要对已访问节点给定一个标记
代码如下:
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
res=[]
stack =[]
prev = None
while root or stack:
while root:
stack.append(root)
root = root.left
root = stack.pop()
if not root.right or root.right == prev:
res.append(root.val)
prev = root
root = None
else:
stack.append(root)
root = root.right
return res