《剑指offer》

1.剑指 Offer-使用DFS和BFS解机器人的运动范围

https://mp.weixin.qq.com/s/LV9mGemmg0fvn7kEWCjCMw

2.BFS和DFS两种方式求岛屿的最大面积

https://mp.weixin.qq.com/s/x-eBh4Ek1WlxB9v7NpXR2w

附二叉树的DFS和BFS:

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);
        }
    }
}
View Code
原文地址:https://www.cnblogs.com/jingpeng77/p/13461751.html