145. Binary Tree Postorder Traversal (E)
Input: root = [1,null,2,3]
Output: [3,2,1]Input: root = []
Output: []Input: root = [1]
Output: [1]Solution:
Last updated
Input: root = [1,null,2,3]
Output: [3,2,1]Input: root = []
Output: []Input: root = [1]
Output: [1]Last updated
class Solution {
Version 1:
/* 动态规划思路 */
// 定义:输入一个节点,返回以该节点为根的二叉树的后序遍历结果
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<Integer> res = new LinkedList<>();
if (root == null) {
return res;
}
// 后序遍历结果特点:先是左子树,接着是右子树,最后是根节点的值
res.addAll(postorderTraversal(root.left));
res.addAll(postorderTraversal(root.right));
res.add(root.val);
return res;
}
Version 2:
/* 回溯算法思路 */
LinkedList<Integer> res = new LinkedList<>();
// 返回后序遍历结果
public List<Integer> postorderTraversal2(TreeNode root) {
traverse(root);
return res;
}
// 二叉树遍历函数
void traverse(TreeNode root) {
if (root == null) {
return;
}
traverse(root.left);
traverse(root.right);
// 后序遍历位置
res.add(root.val);
}
}