递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res = []
def postorderTraversal(self, root: TreeNode) -> List[int]:
#递归
if root == None:
return self.res
self.postorderTraversal(root.left)
self.postorderTraversal(root.right)
self.res.append(root.val)
return self.res
迭代
这类问题的迭代方法是固定的
就是 由root展开到最左节点
那么需要记录一下这个点是否展开过(用一个字典记录每个节点的状态)、
如果展开过,且又遍历到这个节点了
就计入结果
如果没展开过,第一次遍历到这个节点
不计入结果,只展开(按所需的逆序展开)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.res = []
def postorderTraversal(self, root: TreeNode) -> List[int]:
#递归
'''
if root == None:
return self.res
self.postorderTraversal(root.left)
self.postorderTraversal(root.right)
self.res.append(root.val)
return self.res'''
rem = {}
stack = [root]
while stack != []:
temproot = stack.pop()
if temproot == None:
continue
elif temproot != None and temproot not in rem:
rem[temproot] = 1
stack.append(temproot)
stack.append(temproot.right)
stack.append(temproot.left)
else:
self.res.append(temproot.val)
return self.res