首页 > 其他 > 详细

DFS深度优先遍历代码模板

时间:2020-07-17 18:08:48      阅读:59      评论:0      收藏:0      [点我收藏+]

深度优先遍历DFS用栈

递归写法:

Set<Node> visited = new HashSet<>();

public void dfs(Node root, Set<Node> visited) {
    if (visited.contains(root)) {//terminator
        // already visited
        return;
    }
    visited.add(root);

    // process current node here.
    for (Node nextNode : node.children) {
        if (!visited.contains(nextNode)) {
            dfs(nextNode, visited);
        }
    }
}

 

非递归写法:

public int[] dfs(Node root){ 
    if (root == null) {
        return new int[0];
    }
    Set<Node> visited = new HashSet<>();
    Stack<Node> stack = new Stack<>();
    stack.push(root);

    while (!stack.isEmpty()) { 
        Node node = stack.pop();
        visited.add(node);

        process (node); 
        List<Node> nodes = generate_related_nodes(node);
        stack.addAll(nodes); 

        // other processing work 
        // ...
    }
}

 

DFS深度优先遍历代码模板

原文:https://www.cnblogs.com/gaopengpy/p/13331055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!