首页 > 其他分享 >Leetcode 117 -- 树&&bfs

Leetcode 117 -- 树&&bfs

时间:2022-10-09 09:57:59浏览次数:74  
标签:Node 遍历 val -- next bfs 117 right NULL

题目描述

填充每个节点的下一个节点
题目要求我们填充每个节点的 \(next\) 指针,让它指向它的(同一层)右侧的节点,如果没有,指向 $NULL,(初始时全部指向 \(NULL\))。

思路

看到关于二叉树的问题,首先要想到关于二叉树的一些常见遍历方式,
对于二叉树的遍历有:

  1. 前序遍历
  2. 中序遍历
  3. 后序遍历
  4. 深度优先搜索(DFS)
  5. 宽度优先搜索(BFS)
    除了上面介绍的5种以外,还有 \(Morris\)(莫里斯)的前中后 \(3\) 种遍历方式,总共也就这 \(8\) 种。所以只要遇到二叉树相关的算法题,首先想到的就是上面的几种遍历方式,然后再稍加修改,基本上也就这个套路。

这题让求的就是让把二叉树中每行都串联起来,对于这道题来说最适合的就是 \(BFS\)。也就是一行一行的遍历,如下图所示
IMG

代码

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/

class Solution {
public:
    Node* connect(Node* root) {
        if(root == NULL)    return NULL;
        
        queue<Node*> q;
        q.push(root);
        while(q.size())
        {
            Node *pre = NULL;
            int n = q.size();
            for(int i = 0; i < n; i ++ ) // 每次遍历一层
            {
                auto t = q.front(); q.pop(); 
                if(pre) pre->next = t, pre = t;
                else pre = t;
                if(t->left)     q.push(t->left);
                if(t->right)    q.push(t->right);
            }
        }
        return root;
    }
};

标签:Node,遍历,val,--,next,bfs,117,right,NULL
From: https://www.cnblogs.com/ALaterStart/p/16771090.html

相关文章

  • hive导入mysql
    hive测试——HIVE数据分析02题目:4、处理结果入库:(在虚拟机安装mysql)  将上述统计分析的结果数据保存到mySQL数据库中。 #text3_1入库#1.添加驱动,在hive的lib......
  • Redis学习:Redis在Windows下的安装
    一、Redis1、官网地址:**GitHub地址:https://github.com/MSOpenTech/redis/tags备注:现在的Redis官网没有Windows版的下载链接了,只能到GitHub上下载,截止到此刻的最新版本......
  • 《每天一遍,七分再见》(转)
    朝辞白帝彩云间,夕贬潮州路八千两岸猿声啼不住,孤帆一片日边来两岸猿声啼不住,病树前头万木春不畏浮云遮望眼,只缘身在此山中唧唧复唧唧,寒光照铁衣归来见天子,对镜贴花黄......
  • 实验5:开源控制器实践——POX
    实验5:开源控制器实践——POX(一)基本要求验证Hub模块h1pingh2h1pingh3验证Switch模块h1pingh2h1pingh3L2_learning模块流程图(二)进阶要求1.重新搭建(一......
  • nuxt 服务端渲染注意事项
    1.路由nuxt按照pages文件夹的目录结构自动生成路由http://localhost:3000/user/reg相当于去访问pages文件夹下的user文件夹下的reg.vuevue需在src/router/in......
  • 【转载】分享一个查看分析Oracle表空间使用情况的脚本
    该脚本来自潇湘隐者的公众号,虽然目前不管理oracle数据库了,但是可以用作学习使用。 个人一直使用下面这个脚本查看、分析Oracle数据库表空间的使用情况,这个脚本经过我不......
  • 归并算法及求逆序对例题
    归并算法及求逆序对例题归并算法思路首先先确定分界点mid,分界点为mid=(l+r)/2,也就是整个数列的中间,将整个数列通过这个分界点一分为二。分别递归左右两个序列,......
  • [2core]EFCore对象关系映射
    迁移问题新建一个webapi项目,然后安装EFCore类库,以及ERCore.SqlServer类库,像使用ASP.NET4.x一样采用DBFirst模式,创建ADO.NET实体数据模型。步骤没有错,可此时VS2022提示“......
  • 界面组件DevExpress WinForms v22.1 - 数据可视化功能全新升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office......
  • png图片和jpg图片有什么区别
    首先在外观上,没有任何区别。png格式的图片所占存储大小明显大于jpg图片,相比之下jpg格式用于很多场合。png格式图片可进行无损压缩,可以在PS中重新编辑;jpg格式图片会牺牲图......