前序遍历
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null) return list;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode p = stack.pop();
if(p.right != null) stack.push(p.right);
if(p.left != null) stack.push(p.left);
list.add(p.val);
}
return list;
}
中序遍历
public ArrayList<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
ArrayList<Integer> list = new ArrayList<>();
TreeNode node = root;
while(!stack.isEmpty() || node != null){
while(node != null){
stack.push(node);
node = node.left;
}
node = stack.pop();
list.add(node.val);
node = node.right;
}
return list;
}
后序遍历
// 这里利用栈作为辅助空间,先进行 根->左->右 的入栈操作,再依次出栈,
// 出栈得到的顺序是 根-> 右 -> 左,再讲结果 reverse 一下,就是 左-> 右 -> 根 的结果。
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null) return list;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode p = stack.pop();
if(p.left != null) stack.push(p.left);
if(p.right != null) stack.push(p.right);
list.add(p.val);
}
Collections.reverse(list);
return list;
}