题意: 给定一个二叉树,返回它的后序遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根结点
方法一: 递归
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if root == None:
return []
res = []
res += self.postorderTraversal(root.left)
res += self.postorderTraversal(root.right)
res.append(root.val)
return res
方法二: 入栈出栈,列表从前往后实现的是左右根遍历,从后往前实现的是根右左的遍历,换个角度思考算法
class Solution:
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
result = list() #存储最后结果
if root == None:
return result
stack = list() #栈
while stack or root:
if root != None:
stack.append(root)
root = root.right
else:
root = stack.pop()
result.append(root.val)
root = root.right
root = stack.pop()
stack.append(root)
return result