这也是暑期实习的准备之一,最近进入了算法题的整理阶段,感觉提升了很多,后期还会更新的。
这个只含有代码和必要的解释,如果你看不懂的话,建议先把数据结构课本看一下~
后序遍历(⚠️非递归的trick)
递归版
import java.util.*;
public class Solution {
ArrayList<Integer> res = new ArrayList<Integer>();
public ArrayList<Integer> postorderTraversal(TreeNode root) {
if(root!=null){
postorderTraversal(root.left);
postorderTraversal(root.right);
res.add(root.val);
}
return res;
}
}
利用栈
由于先序遍历的顺序是(根,左,右),后序遍历的顺序是(左,右,根),我们可以考虑这样一种方法:将先序遍历改为(根,右,左),然后在将其逆置即可,逆置我们采取的方法是 add(0,num)
,即可实现逆置。
import java.util.*;
public class Solution {
ArrayList<Integer> res = new ArrayList<Integer>();
public ArrayList<Integer> postorderTraversal(TreeNode root) {
if(root==null)
return res;
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);</