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

162.二叉树:填充每个节点的下一个右侧节点指针(力扣)

代码解决

/*
// 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) {queue<Node*> que;  // 定义队列用于层次遍历if (root != NULL) que.push(root);  // 如果根节点不为空,则将根节点加入队列while (!que.empty())  // 当队列不为空时,继续处理{int size = que.size();  // 获取当前层的节点数量Node* node;  // 当前处理的节点Node* prenode;  // 前一个处理的节点for (int i = 0; i < size; i++)  // 遍历当前层的每一个节点{if (i == 0)  // 如果是当前层的第一个节点{prenode = que.front();que.pop();node = prenode;}else  // 如果不是当前层的第一个节点{node = que.front();que.pop();prenode->next = node;  // 将前一个节点的 next 指向当前节点prenode = prenode->next;}if (node->left) que.push(node->left);  // 如果该节点有左子节点,将其加入队列if (node->right) que.push(node->right);  // 如果该节点有右子节点,将其加入队列}prenode->next = NULL;  // 当前层的最后一个节点的 next 设为 NULL}return root;  // 返回根节点}
};

测试代码

#include <iostream>
#include <vector>
#include <queue>using namespace std;// 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;  // 如果根节点为空,直接返回 NULLqueue<Node*> que;  // 定义队列用于层次遍历que.push(root);  // 将根节点加入队列while (!que.empty())  // 当队列不为空时,继续处理{int size = que.size();  // 获取当前层的节点数量Node* prenode = NULL;  // 前一个处理的节点,初始化为 NULLfor (int i = 0; i < size; i++)  // 遍历当前层的每一个节点{Node* node = que.front();  // 从队列中取出一个节点que.pop();  // 将该节点从队列中移除if (prenode != NULL) {prenode->next = node;  // 将前一个节点的 next 指向当前节点}prenode = node;  // 更新前一个节点为当前节点if (node->left) que.push(node->left);  // 如果该节点有左子节点,将其加入队列if (node->right) que.push(node->right);  // 如果该节点有右子节点,将其加入队列}prenode->next = NULL;  // 当前层的最后一个节点的 next 设为 NULL}return root;  // 返回根节点}
};// 辅助函数:创建一个测试树
Node* createTestTree() {Node* root = new Node(1);root->left = new Node(2);root->right = new Node(3);root->left->left = new Node(4);root->left->right = new Node(5);root->right->left = new Node(6);root->right->right = new Node(7);return root;
}// 辅助函数:打印树的每一层
void printTreeByLevel(Node* root) {Node* levelStart = root;while (levelStart != NULL) {Node* current = levelStart;levelStart = NULL;while (current != NULL) {cout << current->val << " ";if (!levelStart) {if (current->left) levelStart = current->left;else if (current->right) levelStart = current->right;}current = current->next;}cout << "-> NULL" << endl;}
}int main() {Solution solution;Node* root = createTestTree();root = solution.connect(root);printTreeByLevel(root);  // 打印连接后的树的每一层return 0;
}

http://www.lryc.cn/news/359468.html

相关文章:

  • NLP(20)--知识图谱+实体抽取
  • 【mysql数据库】mycat中间件
  • 满帮集团 Eureka 和 ZooKeeper 的上云实践
  • ubuntu中彻底删除mysql (配置文件删除可选)
  • 根据模板和git commit自动生成日·周·月·季报
  • matlab GUI界面设计
  • MyBatis 面试题
  • C#根据数据量自动排版标签的样例
  • 【网络安全】Web安全基础 - 第一节:使用软件及环境介绍
  • Mac下载docker
  • k8s_设置dns
  • 翻译《The Old New Thing》- What a drag: Dragging a virtual file (HGLOBAL edition)
  • SA316系列音频传输模块-传输距离升级音质不打折
  • 【机器学习】智能选择的艺术:决策树在机器学习中的深度剖析
  • 电脑缺少运行库,无法启动程序
  • 【计算机软考_初级篇】每日十题2
  • HR人才测评,如何做营销人员岗位素质测评?
  • LabVIEW调用第三方硬件DLL常见问题及开发流程
  • datax实现MySQL数据库迁移shell自动化脚本
  • PostgreSQL的学习心得和知识总结(一百四十四)|深入理解PostgreSQL数据库之sendTuples的实现原理及功能修改
  • C++数据结构之:链List
  • 10.Redis之set类型
  • SpringBoot + mongodb 删除集合中的数据
  • 【日常记录】【JS】前端预览图片的两种方式,Base64预览和blob预览
  • 每日刷题——杭电2156.分数矩阵和杭电2024.C语言合法标识符
  • 爬虫学习--18.反爬斗争 selenium(3)
  • 如何评价GPT-4o?
  • 算能BM1684+FPGA+AI+Camera推理边缘计算盒
  • 不同厂商SOC芯片在视频记录仪领域的应用
  • 【Python入门学习笔记】Python3超详细的入门学习笔记,非常详细(适合小白入门学习)