树-广度优先和深度优先搜索算法

本文介绍了广度优先搜索(BFS)和深度优先搜索(DFS)算法,包括BFS的队列实现和DFS的先序、中序、后序遍历。并以树结构为例,展示了每种遍历方式的具体过程和Java代码实现。
摘要由CSDN通过智能技术生成

广度优先和深度优先搜索算法

本章主要讲述广度优先搜索算法BFS(Breadth First Search)和深度优先算法DFS(Depth First Search)。

  1. 广度优先:从起点开始由近及远进行广泛搜索,一般使用队列实现
  2. 深度优先:从起点开始沿着一条路径一直往下,直到不能搜索为止,再折返沿着另一条路径往下搜索,使用或者递归实现

在这里插入图片描述
下面将以上图中的树来举例实现搜索,每个节点的数据结构如下

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

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

广度优先搜索

  1. 从根节点开始遍历,将根节点加入队列,队列为[50]
  2. 将队首节点50的所有子节点按照从左到右的顺序加入队列,队列为[50,3,67]
  3. 将节点50移出队列,队列为[3,67]
  4. 重复步骤2、3直到所有节点遍历完毕,即可完成广度优先搜索

遍历结果:50, 3, 67, 1, 34, 55, 13, 23

java代码实现如下

    /**
     * 广度优先搜索
     * @param root
     * @return
     */
    public int[] bfs(TreeNode root) {
   
        if (root == null) {
   
            return new int[0];
        }
        List<Integer> result = new LinkedList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root); /* 将根节点放入队列 */
        while (!queue.isEmpty()) {
   
            TreeNode node = queue.poll(); /* 取出队首节点node */
            result.add(node.val);
            if (node.left != null) {
   
                queue.add(node.left); /* 将node的左节点加入队列 */
            }
            if (node.right != null) {
   
                queue.add(node.right); /* 将node的右节点加入队列 */
            }
        }
        return result.stream().mapToInt(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值