给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [3,2,1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal
递归
class Solution {
List<Integer> list1 = new ArrayList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null) return list1;
return postorder(root);
}
public List<Integer> postorder(TreeNode root){
if(root.left != null){
postorder(root.left);
}
if(root.right != null){
postorder(root.right);
}
list1.add(root.val);
return list1;
}
}
迭代1 使用LinkedList
class Solution {
LinkedList<Integer> list1 = new LinkedList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null) return list1;
return postorder(root);
}
public List<Integer> postorder(TreeNode root){
LinkedList<TreeNode> l1 = new LinkedList<>();
l1.add(root);
while(!l1.isEmpty()){
TreeNode n1 = l1.pollLast();
list1.addFirst(n1.val); //addFirst---LinkedList中的方法
if(n1.left != null) l1.add(n1.left);
if(n1.right != null) l1.add(n1.right);
}
return list1;
}
}
迭代 stack
class Solution {
LinkedList<Integer> list1 = new LinkedList<>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root == null) return list1;
return postorder(root);
}
public List<Integer> postorder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode n1 = stack.pop();
if (n1 == null) continue;
list1.addFirst(n1.val);
stack.push(n1.left);
stack.push(n1.right);
}
return list1;
}
}