问题描述

给定一个二叉树,返回它的 后序 遍历。


示例:

LeetCode 145. 二叉树的后序遍历_二叉树的后序遍历



进阶: 递归算法很简单,你可以通过迭代算法完成吗?

题目代码

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
}
}

思路解析

首先需要了解前序,中序,后序遍历的方法.
​​​前序遍历(先序遍历):​​​根结点→左子树→右子树
​​​中序遍历:​​​左子树→根结点→右子树
​​​后序遍历​​左子树→右子树→根结点

也可以这样理解,前中后(根)遍历.即根结点的访问位置,​​前序就是先访问根结点,后依次左右.中序就是根结点再中间位置访问​

LeetCode 145. 二叉树的后序遍历_二叉树的后序遍历_02


代码演示

class Solution {
List<Integer> list = new ArrayList<Integer>();
public List<Integer> postorderTraversal(TreeNode root) {
if (root != null) {
postorderTraversal(root.left);
postorderTraversal(root.right);
list.add(root.val);
}
return list;
}
}

扩展

当要求写前序遍历的代码时,只需更改一个位置即可.
​​​list.add(root.val);​

前序的话
if (root != null) {
list.add(root.val);
postorderTraversal(root.left);
postorderTraversal(root.right);
}
中序
if (root != null) {
postorderTraversal(root.left);
list.add(root.val);
postorderTraversal(root.right);
}