116. 填充每个节点的下一个右侧节点指针——广度搜索、队列

2024-03-29 19:18

本文主要是介绍116. 填充每个节点的下一个右侧节点指针——广度搜索、队列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

方法一 使用队列

class Solution {
public:Node* connect(Node* root) {if(!root)return root;queue<Node*> que;Node* ptr = root;que.push(root);while(!que.empty()){int size = que.size();Node *left = que.front();   //先获取每层最左侧的节点if(left -> left)    //左孩子存在放入队列que.push(left -> left);if(left -> right)   //右孩子存在放入队列que.push(left -> right);que.pop();  //推出for(int i = 1; i < size; i++){  //逐个对右侧节点进行操作Node *right = que.front();  //获取节点left -> next = right;   //left的next 指向 rightleft = right;   //left向右侧移动if(left -> left)   //左孩子存在放入队列que.push(left -> left);if(left -> right)  //右孩子存在放入队列que.push(left -> right);que.pop();}}return root;}
};

Accepted
59/59 cases passed (16 ms)
Your runtime beats 87.17 % of cpp submissions
Your memory usage beats 30.81 % of cpp submissions (16.7 MB)

方法二 空间复杂度O(1)

class Solution {
public:Node* connect(Node* root) {if(!root)return root;Node* leftAlways = root;while(leftAlways -> left){  //如果左节点存在Node* ptr = leftAlways;while(ptr){ptr -> left -> next = ptr -> right; //左节点的next 指向 右节点if(ptr -> next){    //如果当前节点的next存在ptr -> right -> next = ptr -> next -> left; //右节点的next 指向 当前节点的next节点的左节点}ptr = ptr -> next;  //进入next节点继续操作}leftAlways = leftAlways -> left;    //leftAlways始终是每一层的最左节点}return root;}
};

Accepted
59/59 cases passed (20 ms)
Your runtime beats 59.29 % of cpp submissions
Your memory usage beats 94.83 % of cpp submissions (16.3 MB)

这篇关于116. 填充每个节点的下一个右侧节点指针——广度搜索、队列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859411

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring