二叉树的遍历:
力扣144,94,145二叉树的三种遍历方式(递归与迭代),迭代法用栈来做。
1.前序遍历的话是
if(node.right!=null){stack.push(node.right);}if(node.left!=null){stack.push(node.left);}
2.中序遍历的话是,需要用辅助节点temp来做
TreeNode temp=root;Stack<TreeNode> stack = new Stack<>();while (temp!=null||!stack.isEmpty()){if(temp!=null){stack.push(temp);temp=temp.left;}else{temp=stack.pop();res.add(temp.val);temp=temp.right;}}return res;
3.如果是后序遍历的话,也是使用栈来做,先push左,再push右,最后把结果反转返回即可
if(root==null){return res;}Stack<TreeNode> stack = new Stack<>();stack.push(root);while (!stack.isEmpty()){TreeNode node = stack.pop();res.add(node.val);if(node.left!=null){stack.push(node.left);}if(node.right!=null){stack.push(node.right);}}Collections.reverse(res);
4.层序遍历的话就比较简单了,用链表来做
Deque<TreeNode> queue = new LinkedList<TreeNode>();queue.addLast(root);while (!queue.isEmpty()){List<Integer>singleRes=new ArrayList<Integer>();int size=queue.size();for(int i=0;i<size;i++){TreeNode node = queue.pollFirst();singleRes.add(node.val);if(node.left!=null){queue.addLast(node.left);}if(node.right!=null){queue.addLast(node.right);}}res.add(singleRes);}
5.二叉树按最右视角拍照(将内层for循环的第一次遍历结果加入结果集即可)
Deque<TreeNode>queue=new LinkedList<TreeNode>();queue.addLast(root);while (!queue.isEmpty()){int size=queue.size();for(int i=0;i<size;i++) {TreeNode node = queue.pollFirst();if(i==0){res.add(node.val);}if(node.right!=null){queue.addLast(node.right);}if(node.left!=null){queue.addLast(node.left);}}}return res;
