145.二叉树的后序遍历 """ 给定一个二叉树,返回它的 后序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? """ """ 思路: 递归:同理,顺序:左,右,根 迭代:这就很上面的先序一样, 我们可以改变入栈的顺序,刚才先序是从右到左,我们这次从左到右,最后得到的结果取逆. """
定义二叉树:
# 代码:递归:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
由列表生成二叉树:
def Create_Tree(root,list,i):
if i<len(list):
if not list[i]:
return None
else:
root=TreeNode(list[i])
root.left=Create_Tree(root.left,list,i*2+1)
root.right=Create_Tree(root.right,list,i*2+2)
return root
return root
递归代码:
from typing import List
class Solution:
# 后序遍历:递归
def postorderTraversal(self, root: TreeNode) -> List[int]:
res=[]
def helper(root):
if not root: return None
helper(root.left)
helper(root.right)
res.append(root.val)
helper(root)
return res
非递归代码:
def postorderTraversal2(self, root: TreeNode) -> List[int]:
res = []
if not root: return res
stack = [root]
while stack:
node = stack.pop()
if node.left: stack.append(node.left)
if node.right: stack.append(node.right)
res.append(node.val)
return res[::-1]