美文网首页
面试题 04.03. 特定深度节点链表【广度优先搜索算法BFS】

面试题 04.03. 特定深度节点链表【广度优先搜索算法BFS】

作者: 月下蓑衣江湖夜雨 | 来源:发表于2020-08-10 20:42 被阅读0次

题目

题目

思路

就是将树的每一层,都打印成一个链表;
BFS;
BFS的算法思想:
1、根节点压入队列;
2、只要队列不空,处理;
处理队列中的每一个节点(队列中的节点都是同一层的);
队列中的每一个节点的子节点,入临时队列;
用临时队列替换队列;
重复步骤2;

代码

package main

type TreeNode struct {
    Val int
    Left *TreeNode
    Right *TreeNode
}

type ListNode struct {
    Val int
    Next *ListNode
}

const PreAllocSize = 2

func listOfDepth(tree *TreeNode) []*ListNode {
    return bfs(tree)
}

// 广度优先搜索算法
func bfs(tree *TreeNode) []*ListNode {
    // 首先要构造一个队列,使用slice构造,并将顶点入队
    queue := []*TreeNode{tree}
    // 存放结果
    res := make([]*ListNode, 0, PreAllocSize)

    // 队列不空就处理,队列里的都是同一层的节点
    for len(queue) > 0 {

        node := new(ListNode)                           // 空的结果队列头
        tmpNode := node                                 // 相当于指针
        tmpQueue := make([]*TreeNode, 0, PreAllocSize)  // 下层节点的临时存放队列, 不能是局部变量

        // 访问所有节点(属于同一层)
        for i := range queue {
            tmpNode.Next = &ListNode{Val: queue[i].Val}
            tmpNode = tmpNode.Next  // 指针后移

            // 当前节点的子节点入临时队列
            if queue[i].Left != nil {
                tmpQueue = append(tmpQueue, queue[i].Left)
            }

            if queue[i].Right != nil {
                tmpQueue = append(tmpQueue, queue[i].Right)
            }
        }

        // 队列替换为下一层队列
        queue = tmpQueue
        res = append(res, node.Next)   // 注意,node是一个空的头,所以node.Next才是第一个头
    }

    return res
}

相关文章

  • 面试题 04.03. 特定深度节点链表【广度优先搜索算法BFS】

    题目 思路 就是将树的每一层,都打印成一个链表;BFS;BFS的算法思想:1、根节点压入队列;2、只要队列不空,处...

  • 广度优先搜索算法(BFS)

    广度优先搜索算法(BFS) 标签(空格分隔): algorithm 1.广度优先搜索算法(Breadth Firs...

  • 算法图解学习 (六)

    广度优先算法(BFS),是一种图形搜索算法,简单的来说,广度优先算法是从根节点开始开始,沿着树的宽度遍历树的节点,...

  • BFS

    [TOC] BFS 和 DFS BFS广度有限搜索和DFS深度优先搜索算法是特别常用的两种算法 DFS 算法就是回...

  • 深度优先搜索算法(DFS)

    深度优先搜索算法(BFS) 标签(空格分隔): algorithm 1.深度优先搜索算法(Breath Fisrt...

  • 算法图解 (六)

    第六章 广度优先搜索 广度优先搜索算法 (英文: Breadth-First-Search, 缩写为BFS), 又...

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 深度优先和广度优先查找以及拓扑排序

    深度和广度优先查找 归属:蛮力法 简称:DFS(深度优先查找)、BFS(广度优先查找) 思想:DFS: 深度优先查...

  • 广度优先搜索算法(go)

    广度优先搜索算法(Breadth First Search,缩写为BFS),又译作宽度优先搜索,或横向优先搜索,是...

  • 算法与数据结构 之 搜索算法

    搜索分为广度优先搜索、深度优先搜索、A*算法。 一、广度优先算法(BFS) 1.1、基本实现和特性:BFS是从一个...

网友评论

      本文标题:面试题 04.03. 特定深度节点链表【广度优先搜索算法BFS】

      本文链接:https://www.haomeiwen.com/subject/ugcsdktx.html