leetcode日记(100)填充每个节点的下一个右侧节点指针

news/2025/4/2 3:55:58/

和层序遍历差不多的思路,将节点储存在队列里,一边取出节点一边放入取出节点的左右节点,直到队列空。

/*
// 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 root;int record=1;queue<Node*> n;n.push(root);while(!n.empty()){Node* node=NULL;for(int i=0;i<record;i++){Node* first=n.front();if(first->left){n.push(first->left);n.push(first->right);}if(node) node->next=first;node=first;n.pop();}record*=2;}return root;}
};

本来我是写的vector,但是发现queue更好,完美匹配。

以及看了答案发现还有一种很机智的思路。

大概就是next有两种取法(对于root和其left、right),一种是left的next为right,一种是right的next为root的next的left。

如此就可以递归。

/*
// 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) {Node* result=root;while(root){Node* record=root->left;while(root&&root->left){root->left->next=root->right;if(root->next) root->right->next=root->next->left;root=root->next;}root=record;}return result;}
};


http://www.ppmy.cn/news/1584604.html

相关文章

# 基于 OpenCV 的运动目标检测与跟踪

在计算机视觉领域&#xff0c;运动目标检测与跟踪是一项重要的任务&#xff0c;广泛应用于监控、智能交通、机器人导航等领域。本文将介绍如何使用 OpenCV 实现一个简单的运动目标检测系统。通过该系统&#xff0c;我们可以从视频中实时检测出运动物体&#xff0c;并将其标记出…

Flink内存模型--flink1.19.1

Flink 的 JobManager 和 TaskManager 在内存分配上有不同的职责和结构。以下是两者的内存分类及详细说明&#xff1a; 一、JobManager 内存分类 JobManager 主要负责作业调度、协调&#xff08;如 Checkpoint 协调&#xff09;、资源管理等&#xff0c;其内存需求相对较低&…

Linux探秘坊-------10.基础IO

1.文件理解 1.狭义理解 2.⼴义理解 3.⽂件操作的归类认知 2.c语言的文件操作复习 1.读文件 #include <stdio.h> #include <string.h> int main() {FILE* fp fopen("myfile", "r");if (!fp) {printf("fopen error!\n");return 1;…

3. 列表元素替换

【问题描述】给定一个列表&#xff0c;将列表中所有的偶数替换为0 【输入形式】输入一行&#xff0c;包含若干个整数&#xff0c;用空格分隔 【输出形式】输出替换后的列表&#xff0c;每个元素用空格分隔 【样例输入】1 2 3 4 5 6 7 8 9 10 【样例输出】1 0 3 0 5 0 7 0 9…

基于大模型的知识图谱搜索的五大核心优势

在传统知识图谱与生成式AI融合的浪潮中&#xff0c;基于大模型的知识图谱搜索正成为新一代智能检索的标杆技术&#xff0c;飞速灵燕智能体平台就使用了该技术&#xff0c;其核心优势体现在&#xff1a; 1. 语义穿透力升级 突破关键词匹配局限&#xff0c;通过大模型的深层语义…

使用MyBatis Plus的QueryWrapper实现复杂的SQL查询

QueryWrapper<SysUser> queryWrapper new QueryWrapper<>(); queryWrapper.eq("del_flag", "0").and(wrapper -> wrapper.like("user_name", "粥").or().like("nick_name", "粥")).in("user…

每日c/c++题 备战蓝桥杯(全排列问题)

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列&#xff0c;即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个场…

端侧设备(如路由器、家庭网关、边缘计算盒子、工业网关等)的典型系统、硬件配置和内存大小

🏠 家用/工业级边缘设备硬件概览 类型常见设备示例CPU 架构内存范围操作系统类型家用路由器TP-Link、小米、华硕、OpenWrtARM Cortex-A7/A964MB~256MBOpenWrt / DD-WRT / Embedded Linux智能家庭网关华为、绿米、天猫精灵、Aqara HubARM Cortex-M/R128MB~512MBEmbedded Lin…