给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
1.递归解法
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
self.res = []
self.dfs(root)
return self.res
def dfs(self,node:TreeNode):
if node is None:
return
self.dfs(node.left)
self.dfs(node.right)
self.res.append(node.val)
2.非递归解法
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
"""
左右根
根右左-->反转
"""
res = []
if root is None:
return res
stack = []
stack.append(root)
while len(stack)>0:
node = stack.pop()
res.append(node.val)
if node.left!=None:
stack.append(node.left)
if node.right!= None:
stack.append(node.right)
res.reverse()
return res


![[leetcode]145.二叉树的后序遍历 [leetcode]145.二叉树的后序遍历](http://www.mshxw.com/aiimages/31/273439.png)
