解题思路
按照后序遍历左子节点->右子节点->根节点
的顺序来,下图的最终结果就是4 5 2 6 7 3 1
递归法
递归法十分简单,直接套模板即可
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
res = []
self.dfs(root, res)
return res
def dfs(self, root, res):
if not root: return
self.dfs(root.left, res)
self.dfs(root.right, res)
res.append(root.val)
迭代法
算法过程
- 初始化栈
stack
,将根节点root入栈 - 如果左子节点非空,将左子节点入栈
- 如果右子节点非空,将右子节点入栈
- 最后将
root
的值放入结果res
中 - 最终返回倒序的res
代码
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
res = []
stack = [root]
if not root: return res
while stack:
cur = stack.pop()
if cur.left:stack.append(cur.left)
if cur.right:stack.append(cur.right)
res.append(cur.val)
return res[::-1]