深度优先遍历/广度优先遍历(递归+非递归java实现)

来源:互联网 发布:luastudio for mac 编辑:程序博客网 时间:2024/05/27 19:26

深度优先遍历/广度优先遍历

import java.util.LinkedList;import java.util.Stack;import java.util.Queue;public class Graph{    private int number = 9;    private boolean[] flag;    private String[] vertexs = {"A", "B", "C", "D", "E", "F", "G", "H", "I"};    private int[][] edges = {        {0, 1, 0, 0, 0, 1, 1, 0, 0},        {1, 0, 1, 0, 0, 0, 1, 0, 1},        {0, 1, 0, 1, 0, 0, 0, 0, 1},        {0, 0, 1, 0, 1, 0, 1, 1, 1},        {0, 0, 0, 1, 0, 1, 0, 1, 0},        {1, 0, 0, 0, 1, 0, 1, 0, 0},        {0, 1, 0, 1, 0, 1, 0, 1, 0},        {0, 0, 0, 1, 1, 0, 1, 0, 0},        {0, 1, 1, 1, 0, 0, 0, 0, 0},    };    public static void main(String[] args){        Graph graph = new Graph();        System.out.println("DFS递归");        graph.DFSTraverse();        System.out.println();        System.out.println("DFS非递归");        graph.DFS_Map();        System.out.println();        System.out.println("BFS非递归");        graph.BFS_Map();    }    void DFSTraverse(){        flag = new boolean[number];        for(int i = 0; i < number; i++){            if(flag[i] == false){                DFS(i);            }        }    }    void DFS(int i){        flag[i] = true;        System.out.print(vertexs[i] + " ");        for(int j = 0; j < number; j++){            if(flag[j] == false && edges[i][j] == 1)                DFS(j);        }    }    void DFS_Map(){        flag = new boolean[number];        Stack<Integer> stack = new Stack<Integer>();        for(int i = 0; i < number; i++){            if(flag[i] == false){                flag[i] = true;                System.out.print(vertexs[i] + " ");                stack.push(i);            }            while(!stack.isEmpty()){                int k = stack.pop();                for(int j = 0; j < number; j++){                    if(edges[k][j] == 1 && flag[j] == false){                        flag[j] = true;                        System.out.print(vertexs[j] + " ");                        stack.push(j);                        break;                    }                }            }        }    }    void BFS_Map(){        flag = new boolean[number];        Queue<Integer> queue = new LinkedList<Integer>();        for(int i = 0; i < number; i++){            if(flag[i] == false){                flag[i] = true;                System.out.print(vertexs[i] + " ");                queue.add(i);                while(!queue.isEmpty()){                    int k = queue.poll();                    for(int j = 0; j < number; j++){                        if(edges[k][j] == 1 && flag[j] == false){                            flag[j] = true;                            System.out.print(vertexs[j] + " ");                            queue.add(j);                        }                    }                }            }        }    }}

二叉树的最大深度

递归实现

public class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) { val = x; } }public class TreeMaxDepth{    public int maxDepth(TreeNode root) {        return depth(root);    }    private int depth(TreeNode node){        if(node != null){            return max(depth(node.left) + 1, depth(node.right) + 1);        }else{            return 0;        }    }    private int max(int x, int y){        return (x>y) ? x:y;    }}
0 0