关于 深度优先搜索和广度优先搜索
狭义上来讲,深度优先(dfs)就是使用迭代,广度优先(bfs)就是使用while循环。
使用二叉树讲解的话,dfs先从首节点开始逐渐遍历到最后一层的第一个节点,随后再进行下一轮的延伸。而bfs就是先遍历第一层,再遍历第二层直到最后一层。
下面写一个java做二叉树遍历的例子。此算法解决的是在二叉树中寻找是否存在两个节点的值之和为k。
dfs:
class Solution {
Set<Integer> set = new HashSet<Integer>();
public boolean findTarget(TreeNode root, int k) {
if (root == null) {
return false;
}
if (set.contains(k - root.val)) {
return true;
}
set.add(root.val);
return findTarget(root.left, k) || findTarget(root.right, k);
}
}
bfs:
class Solution {
public boolean findTarget(TreeNode root, int k) {
Set<Integer> set = new HashSet<>();
Queue<TreeNode> kk = new LinkedList<>();
kk.add(root);
while(!kk.isEmpty()){
TreeNode n = kk.poll();
if(n.left!=null){
kk.add(n.left);
}
if(n.right!=null){
kk.add(n.right);
}
if(set.contains(k-n.val)){
return true;
}
set.add(n.val);
}
return false;
}
}