菜鸟心得.... 不对请指出.......
/*
BFS,广度优先搜索树,用最简单的2叉树来举例, 树的结构如下:
A
B C
D E F G
H I J K L M N O
广度优先搜索树, 顺序应该是ABCDEFGHIJKLMNO;
意思是,先搜索完 上一层的节点,再开始搜索下一层的节点;
那么在BFS中, 会使用到一种数据结构----队列
队列的特点是,先进先出, 就像一条水管一样,这头进,那头出。
尾----------------------头
->> F E D C B A ->>>
-------------------------
从左边进去,只能从右边出来, 而先进去的,总是会先出来。
利用队列的这个特点。
1,先把根节点放进队列中。
当队列不为空时,执行下列234,否则结束。
2,取出队列的头,判断其value是否和x相同(X为要找的值),如果是,结束,否则删除 头元素 继续下一步。
3,判断左子树是否为空,不为空,将左子树放进队列。
4,判断右子树是否为空,不为空,将右子树放进队列。
*/
1 import java.util.Queue;
3 public class BFS {
4 class tree {
5 tree left;
6 tree right;
7 int value;
8
9 public tree(int value) {
10 this.value = value;
11 }
12 }
13
14 private Queue<tree> queue = new LinkedList<tree>();
15
16 public void solution(tree node, int x) {
17 queue.offer(node);
18 if (!queue.isEmpty()) {
19 if (queue.peek().value != x) {
20 queue.remove();
21 if (node.left != null) {
22 queue.add(node.left);
23 }
24 if (node.right != null) {
25 queue.add(node.right);
26 }
27 }
28 }
29 }
30
31 }
/*
DFS,深度优先搜索树,还是用最简单的二叉树来举例,
用最简单的办法,递归遍历。
或者适用 stack这数据结构。
*/
1 import java.util.Stack;
2
3 public class dfs {
4 class tree {
5 tree left;
6 tree right;
7 int value;
8
9 public tree(int value) {
10 this.value = value;
11 }
12 }
13
14 private Stack<tree> stack = new Stack<tree>();
15
16 public void solution(tree node, int x) {
17 stack.push(node);
18 if (!stack.isEmpty()) {
19 if (stack.peek().value != x) {
20 stack.pop();
21 if (node.right != null) {
22 stack.add(node.right);
23 }
24 if (node.left != null) {
25 stack.add(node.left);
26 }
27 }
28 }
29 }
30
31 public void solution2(tree node, int x) {
32 if (node.value != x) {
33 if (node.left != null) {
34 solution2(node.left, x);
35 } else if (node.right != null) {
36 solution2(node.left, x);
37 }
38 }
39 }
40 }