当前位置: 首页 > backend >正文

LeetCode117_填充每个结点的下一个右侧结点指针Ⅱ

LeetCode117_填充每个结点的下一个右侧结点指针Ⅱ

  • 标签:#树 #深度优先遍历 #广度优先遍历 #链表 #二叉树
    • Ⅰ. 题目
    • Ⅱ. 示例
  • 0. 个人方法

标签:#树 #深度优先遍历 #广度优先遍历 #链表 #二叉树

Ⅰ. 题目

  • 给定一个二叉树:
struct Node {int val;Node *left;Node *right;Node *next;
}
  • 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。

  • 初始状态下,所有 next 指针都被设置为 NULL。

Ⅱ. 示例

· 示例 1:
输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:序列化输出按层序遍历顺序(由 next 指针连接),‘#’ 表示每层的末尾。

· 示例 2:
输入:root = []
输出:[]

0. 个人方法

由题目可知,本题是要解决一个层序遍历(BFS)的问题。因此,可以通过队列“先进先出”的性质,将树按层连接起来。

  1. 使用队列 std::queue<Node*> q 来存储每层的节点;
  2. 每次处理一层中的所有节点,并将下一层的子节点加入队列;
  3. 对于同一层的节点,设置 next 指针为右边相邻的节点;
  4. 最后,当queue为空时,完成遍历。
/*
// 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) {std::queue<Node*> q;if (root != nullptr){q.push(root);}while (!q.empty()){int levelSize = q.size();for (int i=0; i<levelSize; i++){Node* current = q.front();q.pop();if (i < levelSize-1){current->next = q.front();}if (current->left)q.push(current->left);if (current->right)q.push(current->right);}}return root;}
};
  • 复杂度分析(记树上的点的个数为 N)

    • 时间复杂度:O(N)。我们需要遍历这棵树上所有的点,时间复杂度为 O(N)。

    • 空间复杂度:O(N)。即队列的空间代价。

http://www.xdnf.cn/news/7848.html

相关文章:

  • WPS深度适配鸿蒙电脑折叠形态,国产替代下的未来何在?
  • L53.【LeetCode题解】二分法习题集2
  • 关于收集 Android Telephony 网络信息的设计思考2
  • WinForms 应用中集成 OpenCvSharp 实现基础图像处理
  • 基于AI大语言模型的历史文献分析在气候与灾害重建中的技术-以海南岛千年台风序列重建为例
  • C++初阶-vector的模拟实现2
  • 前端(小程序)学习笔记(CLASS 1):组件
  • 强化学习入门:RL开发框架Gym简介
  • App 出海:全渠道营销如何通过性能监控与精准归因实现增长
  • 【209. 长度最小的子数组】
  • shell脚本之函数详细解释及运用
  • 【深度估计 Depth Estimation】数据集介绍
  • [Java实战]Spring Boot整合Seata:分布式事务一致性解决方案(三十一)
  • 云祺容灾备份系统公有云备份与恢复实操-华为云
  • 【机器学习】支持向量机(SVM)
  • Suricata 3规则介绍、以及使用
  • 亚马逊AWS跑不动了?
  • 港股IPO市场火爆 没有港卡如何参与港股打新?
  • 网络爬虫(Web Crawler)详解
  • 第九届电子信息技术与计算机工程国际学术会议(EITCE 2025)
  • 使用 OpenCV 实现哈哈镜效果:让图像“扭曲起来”!
  • Node.js Express 项目现代化打包部署全指南
  • 基于亚马逊云科技构建音视频直播审核方案
  • Redis应用--缓存
  • MyBatis简单使用
  • 2025年度消费新潜力白皮书470+份汇总解读|附PDF下载
  • BAGEL-7B-MoT论文速读:统一多模态预训练的新特性
  • JUC高并发编程
  • 【笔记】快速安装Poetry
  • 138. Copy List with Random Pointer