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

相关文章

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

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每