1.剑指 Offer-使用DFS和BFS解机器人的运动范围
https://mp.weixin.qq.com/s/LV9mGemmg0fvn7kEWCjCMw
2.BFS和DFS两种方式求岛屿的最大面积
https://mp.weixin.qq.com/s/x-eBh4Ek1WlxB9v7NpXR2w
附二叉树的DFS和BFS:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package traversalAlgorithm; import java.util.LinkedList; import java.util.Stack; public class DepthFirstTraversal { public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); // preOrderTraverse2(root); levelTraverse(root); } // 1.先序遍历 递归实现 public static void preOrderTraverse1(TreeNode root){ if(root==null)return; System.out.print(root.val+" "); preOrderTraverse1(root.left); preOrderTraverse1(root.right); } // 2.先序遍历 非递归实现---栈 public static void preOrderTraverse2(TreeNode root) { if(root==null)return; Stack<TreeNode> stack = new Stack<>(); stack.push(root); while(!stack.isEmpty()){ TreeNode node = stack.pop(); System.out.print(node.val+" "); if(node.right!=null) stack.push(node.right); if(node.left!=null) stack.push(node.left); } } // 3.层次遍历 / 广度遍历 public static void levelTraverse(TreeNode root) { if(root==null) return; LinkedList<TreeNode> queue = new LinkedList<>(); queue.offer(root); while(!queue.isEmpty()){ TreeNode node = queue.poll(); System.out.print(node.val+" "); if(node.left!=null) queue.offer(node.left); if (node.right!=null) queue.offer(node.right); } } }