二叉树的遍历:
    力扣144,94,145二叉树的三种遍历方式(递归与迭代),迭代法用栈来做。
    1.前序遍历的话是

    1. if(node.right!=null){
    2. stack.push(node.right);
    3. }
    4. if(node.left!=null){
    5. stack.push(node.left);
    6. }

    2.中序遍历的话是,需要用辅助节点temp来做

    1. TreeNode temp=root;
    2. Stack<TreeNode> stack = new Stack<>();
    3. while (temp!=null||!stack.isEmpty()){
    4. if(temp!=null){
    5. stack.push(temp);
    6. temp=temp.left;
    7. }else{
    8. temp=stack.pop();
    9. res.add(temp.val);
    10. temp=temp.right;
    11. }
    12. }
    13. return res;

    3.如果是后序遍历的话,也是使用栈来做,先push左,再push右,最后把结果反转返回即可

    1. if(root==null){
    2. return res;
    3. }
    4. Stack<TreeNode> stack = new Stack<>();
    5. stack.push(root);
    6. while (!stack.isEmpty()){
    7. TreeNode node = stack.pop();
    8. res.add(node.val);
    9. if(node.left!=null){
    10. stack.push(node.left);
    11. }
    12. if(node.right!=null){
    13. stack.push(node.right);
    14. }
    15. }
    16. Collections.reverse(res);

    4.层序遍历的话就比较简单了,用链表来做

    1. Deque<TreeNode> queue = new LinkedList<TreeNode>();
    2. queue.addLast(root);
    3. while (!queue.isEmpty()){
    4. List<Integer>singleRes=new ArrayList<Integer>();
    5. int size=queue.size();
    6. for(int i=0;i<size;i++){
    7. TreeNode node = queue.pollFirst();
    8. singleRes.add(node.val);
    9. if(node.left!=null){
    10. queue.addLast(node.left);
    11. }
    12. if(node.right!=null){
    13. queue.addLast(node.right);
    14. }
    15. }
    16. res.add(singleRes);
    17. }

    5.二叉树按最右视角拍照(将内层for循环的第一次遍历结果加入结果集即可)

    1. Deque<TreeNode>queue=new LinkedList<TreeNode>();
    2. queue.addLast(root);
    3. while (!queue.isEmpty()){
    4. int size=queue.size();
    5. for(int i=0;i<size;i++) {
    6. TreeNode node = queue.pollFirst();
    7. if(i==0){
    8. res.add(node.val);
    9. }
    10. if(node.right!=null){
    11. queue.addLast(node.right);
    12. }
    13. if(node.left!=null){
    14. queue.addLast(node.left);
    15. }
    16. }
    17. }
    18. return res;