题目介绍
力扣145题:leetcode-cn.com/problems/bi…
方法一:递归
简单代码如下:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
if(root == null) {
return result;
}
postOrder2(root,result);
return result;
}
public void postOrder2(TreeNode root,List<Integer> result) {
if(root == null) {
return ;
}
postOrder2(root.left,result);
postOrder2(root.right,result);
result.add(root.val);
}
}
方法二:迭代
后序遍历不就是前序遍历的翻转吗,参考[144. 二叉树的前序遍历],前序遍历是往后加元素,后序遍历是往前加元素。
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Deque<TreeNode> stack = new LinkedList<>();
LinkedList<Integer> ans = new LinkedList<>();
if (null == root) return ans;
stack.addFirst(root);
while(!stack.isEmpty()) {
TreeNode node = stack.removeFirst();
ans.addFirst(node.val);
if (null != node.left) {
stack.addFirst(node.left);
}
if (null != node.right) {
stack.addFirst(node.right);
}
}
return ans;
}
}