【算法】高级搜索

一、内容

1、BFS

public class TreeNode {
   
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
   
        val = x;
    }
}

public List<List<Integer>> BFS(TreeNode root) {
   

	List<List<Integer>> allResults = new ArrayList<>();
    if (root == null)  return allResults;
    
    Queue<TreeNode> nodes = new LinkedList<>();
    nodes.add(root);
    while (!nodes.isEmpty()) {
   
        int levelSize = nodes.size();
        List<Integer> results = new ArrayList<>();
        for (int i = 0; i < levelSize; i++) {
   
            TreeNode currNode = nodes.poll();
            results.add(currNode.val);
            if (currNode.left != null)  nodes.add(currNode.left);
            if (currNode.right != null)  nodes.add(currNode.right);
        }
        allResults.add(results);
    }
    return allResults;
}

拓展:双向BFS (面试一般不要求)

public int doubleBFS(ElementType start, ElementType end) {
   
    if (start == end) return 1;
 
    # 分别从起点和终点开始的两个BFS队列
    Queue<TreeNode> startQueue = new LinkedList<>();
    Queue<TreeNode> endQueue = new LinkedList<>();
    startQueue.add(start);
    endQueue.add(end);
 
    # 从起点开始和从终点开始分别访问过的节点集合.有时候startQueue与startVisited只需要一个,或者二合一
    Set<ElementType> startVisited = new HashSet<>();
    Set<ElementType> endVisited = new HashSet<>();
    startVisited.add(start)
    endVisited.add(end)
    
    Queue<ElementType> tempQueue = new LinkedList<>();
    Set<ElementType> tempVisited = new HashSet<>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值