美文网首页
深度优先搜索和广度优先搜索

深度优先搜索和广度优先搜索

作者: 霹雳解锋镝 | 来源:发表于2020-03-21 23:48 被阅读0次

一、深度优先搜索

深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。
深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,方便的解决很多相关的图论问题。
其过程为遍历分支路径深入到不能再深入为止,且每个节点只能访问一次。
一般用堆数据结构来辅助实现DFS算法。如最大路径问题等等。
缺点难以寻找最优解,仅仅只能寻找有解。
class Solution {
    int res = 0;
    int maxdepth = 0;
    public int findBottomLeftValue(TreeNode root) {
        dfs(root,0);
        return res;
    }
    public void dfs(TreeNode node,int depth){
        if(node==null) return ;
        if(depth>maxdepth){
            res = node.val;
            maxdepth = depth;
        }
        dfs(node.left,depth+1);
        dfs(node.right,depth+1);
    }
}

二、广度优先搜索

广度优先搜索(也称宽度优先搜索,缩写BFS)是连通图的一种遍历算法。
属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。
从根节点开始,沿着树(图)的宽度遍历树(图)的节点。如果所有节点均被访问,则算法中止。
一般用队列数据结构来辅助实现BFS算法。
适用于节点的子节点数不多,并且树的层次不会太深的情况
class Solution {
    public int findBottomLeftValue(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while(!queue.isEmpty()){
            root = queue.poll();
            if(root.right!=null) queue.offer(root.right);
            if(root.left!=null) queue.offer(root.left);
        }
        return root.val;
    }
}

相关文章

网友评论

      本文标题:深度优先搜索和广度优先搜索

      本文链接:https://www.haomeiwen.com/subject/qjbpyhtx.html