深度优先遍历/广度优先遍历(递归+非递归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
- 深度优先遍历/广度优先遍历(递归+非递归java实现)
- 二叉树的深度优先遍历(递归、非递归),广度优先遍历(递归)
- 邻接矩阵的深度优先遍历(递归以及非递归),广度优先遍历
- 树的深度优先遍历和广度优先遍历非递归实现.
- 树的广度优先遍历(非递归)和深度优先遍历
- 深度优先遍历算法--非递归实现
- 非递归深度优先遍历
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 简要说明树的深度优先、广度优先遍历算法,及非递归实现的特点
- 深度优先遍历与广度优先遍历 递归与非递归思路
- 深度优先遍历与广度优先遍历 递归与非递归思路
- 深度优先遍历与广度优先遍历 递归与非递归思路
- 图的深度优先遍历(递归与非递归算法)和广度优先遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 【概念】【二叉树】深度优先遍历、广度优先遍历和非递归遍历
- 二叉树的深度优先遍历、广度优先遍历和非递归遍历
- 面向对象 参数传递 (方法 -- 构造方法--重载)
- javascript 继承/构造函数
- Android 反射 换一种方式编程
- java中subSequence方法和subString方法的区别
- leetcode13. Roman to Integer
- 深度优先遍历/广度优先遍历(递归+非递归java实现)
- 【转】sql之left join、right join、inner join的区别
- jpush自定义推送声音
- 二叉树
- 杂记4
- 3、文件相关命令
- java.lang.NoSuchFieldError: VERSION_2_3_0 报错解决方案
- Linux command note
- 提高C#编程水平的50个要点 之三“在 as 和 强制类型转换之间,优先使用 as 操作符”。