/**
* 117. 填充每个节点的下一个右侧节点指针 II
* @author wsq
* @date 2020/09/29
给定一个二叉树
struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
进阶:
你只能使用常量级额外空间。
使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
示例:
输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。
链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii
*/
package com.wsq.leetcode;
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
}
public class ConnectNextNode {
/**
* 采用递归的方式实现
* 1. 由于左边树节点建立next指针需要依赖右边树节点的next节点的建立
* 2. 因此,从树的最右边开始建立连接,
* @param root
* @return
*/
public Node connect(Node root) {
dfs(root);
return root;
}
public void dfs(Node currNode) {
if(currNode == null) {
return;
}
if(currNode.right != null) {
if (currNode.next != null) {
Node tmpNode = currNode.next;
while(tmpNode != null) {
if(tmpNode.left != null || tmpNode.right != null) {
break;
}
tmpNode = tmpNode.next;
}
if(tmpNode != null) {
if(tmpNode.left != null) {
currNode.right.next = tmpNode.left;
}else {
currNode.right.next = tmpNode.right;
}
}
}
}
if(currNode.left != null) {
if(currNode.right != null) {
currNode.left.next = currNode.right;
}else if(currNode.next != null){
Node tmpNode = currNode.next;
while(tmpNode != null) {
if(tmpNode.left != null || tmpNode.right != null) {
break;
}
tmpNode = tmpNode.next;
}
if(tmpNode != null) {
if(tmpNode.left != null) {
currNode.left.next = tmpNode.left;
}else {
currNode.left.next = tmpNode.right;
}
}
}
}
dfs(currNode.right);
dfs(currNode.left);
}
public static void main(String[] args) {
Integer[] arr = {1,2,3,4,5,null,7};
Node head = buildTree(arr, 0);
ConnectNextNode cn = new ConnectNextNode();
cn.connect(head);
System.out.println(head.val);
}
public static Node buildTree(Integer[] a, int pos) {
if(pos >= a.length || a[pos] == null) {
return null;
}
Node root = new Node(a[pos]);
root.left = buildTree(a, 2 * pos + 1);
root.right = buildTree(a, 2 * pos + 2);
return root;
}
}
相关推荐
英飞凌TC377的Flash管理、UCB配置与HSM安全机制解析
本文深入解析了英飞凌TC377微控制器的Flash存储结构、UCB配置机制与HSM安全模块。详细阐述了带Cache与不带Cache的PFlash地址访问差异、利用SOTA与AB Swap实现无感OTA更新的原理,以及如何通过UCB安全配置启动流程与写保护。重点剖析了HSM硬件安全模块在密钥管理、安全启动与安全OTA中的核心作用,为开发高可靠性嵌入式系统提供实战指南。
leetcode_117.填充每个节点的下一个右侧节点指针II(C++,递归思路)
题目 原题链接 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 进阶: 你只能使用常量级额外空间。 使用...
嵌入式统一消息机制:模块解耦与零拷贝通信设计
在嵌入式系统开发中,模块间通信(IMC)是影响可维护性与实时性的关键环节。传统IPC方式如全局变量、信号量或Socket易导致高耦合、调试困难及跨平台适配成本高。统一消息机制通过逻辑地址抽象、标签/实体分离、路由表驱动等原理,实现控制流与数据流解耦,在裸机、RTOS及Linux用户态保持一致接口。其技术价值在于降低模块依赖复杂度、支持动态增删与分布式迁移,并通过零拷贝优化显著减少CPU与内存开销。典型应用场景涵盖工业网关、城域交换机、多核ARM边缘设备等资源受限环境,尤其适用于需长期稳定运行、快速迭代与混合
LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归&循环)
文章目录1. 题目2. 解题2.1 递归2.2 queue循环2.3 利用next循环 1. 题目 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 类似题目:LeetCode 116 2. 解题 2.1 递归 左节点: root有左节点和右节点,则左节点的n...
【IT小趣闻】免费的DeepSeek是如何赚钱的?
导语:目前很多的通用人工智能也就是所谓的AGI例如文心一言、豆包、通义千问和最近大火的DeepSeek都是免费给普通用户使用的,对开源商业模式不太熟悉的普通人可不太了解这免费背后的商业套路,下面我们就一起来揭秘。开源模式能降低用户信任成本、加速技术普及,而商业化服务则针对企业级需求。DeepSeek 可通过组合上述策略,在服务开发者社区的同时,满足企业客户的深度需求,实现可持续发展。你也看出来了,上边是DeepSeek生成的,讲的还是挺明白的。
SPSS篇—卡方检验
今天依旧跟大家分享一个在SPSS中使用率比较高的分析方法:卡方检验。 在开始做分析之前,我们需要明白两件事情:卡方检验是什么?一般用来干什么?我们只有充分了解分析方法以后才能够正确的使用它。 卡方检验在百科中的解释是:卡方检验是用途非常广的一种假设检验方法,它在分类资料统计推断中的应用,包括:两个率或两个构成比比较的卡方检验;多个率或多个构成比比较的卡方检验以及分类资料的相关分析等。它的原理是...
leetcode 116. 填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II【递归】
在这里插入代码片
AI 边缘计算控制器GEAC91
AI 边缘计算控制器GEAC91是AI边缘计算控制器是一款基于 NVIDIA Jetson AGX Xavier处理 器、面向智能边缘计算应用场景的解决方案。
【leetcode】117 填充每个节点的下一个右侧节点指针II(二叉树,递归)
题目链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/ 题目描述 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点...
SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定
本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。
《AI编程实战:深度学习模型改进与系统部署》,改进专栏目录和介绍
专深度学习相关项目都写在本专栏,《一次订阅解锁全部,都有源码,永久观看》,包括车牌识别、股票预测、人脸识别、风格迁移、图像修复、图像超分辨重建、图像分割等任务,Web/PyQt系统实现。引入Transformer、Swin Transformer、DenseNet、ViT、ConvNeXt等算法实战,提供卷积改进,魔改对比实验,模型剪枝,模型蒸馏,模型量化,全网独家整合改进专栏,为不同领域的同学发表论文提供了大力支持。
简单递归+层序遍历(记录层数) 116. 填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II
递归实现填充节点 /* // 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) {}
Linux内核4.14版本——drm框架分析(1)——drm简介
本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。
[ C语言 LeetCode 117 ] 基于层次遍历算法(非递归)实现填充每个节点的下一个右侧节点指针 II
填充每个节点的下一个右侧节点指针 给定一个二叉树 typedef struct BTNode { int val; struct BTNode *left; struct BTNode *right; struct BTNode *next; }BTNode; 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 示例: 输入:root = [1,2,3,4,
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
IDEA的使用指南
IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.
2021.1.22每日复习 116.填充每个节点的下一个右侧节点指针(递归+迭代)+ 117.填充每个节点的下一个右侧节点指针II(递归+迭代)
116.填充每个节点的下一个右侧节点指针(递归+迭代) 117.填充每个节点的下一个右侧节点指针II(递归+迭代)
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
leetcode117. 填充每个节点的下一个右侧节点指针 II/层次遍历
文章目录题目:117. 填充每个节点的下一个右侧节点指针 II基本思想1:层次遍历基本思想2:层次遍历(进阶) 题目:117. 填充每个节点的下一个右侧节点指针 II 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 进
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
leetcode题117填充每个节点的下一个右侧节点指针-递归法解
注意:先右后左的去处理next节点的寻找
LeetCode 117:填充每个节点的下一个右侧节点指针 II
目录LeetCode题目描述解题 LeetCode 题目描述 解题 填充每个节点的下一个右侧节点指针 II /* // 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) : va
LeetCode 117. 填充每个节点的下一个右侧节点指针 II(Java代码)
下次碰到链表题目,不偷懒,一定画图。脑袋抽象疯了。。。
LeetCode刷题笔记 117. 填充每个节点的下一个右侧节点指针 II
117. 填充每个节点的下一个右侧节点指针 II题目要求题解递归迭代 题目要求 117. 填充每个节点的下一个右侧节点指针 II 题解 https://github.com/soulmachine/leetcode 递归 class Solution { public: Node* connect(Node* root) { if(!root) return root;...
LeetCode117——填充同一层的兄弟节点 II
我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/description/ 题目描述: 知识点:递归、树的深度优先遍历 思路一:和LeetCode116——填充同一...
Leetcode 117. 填充每个节点的下一个右侧节点指针 II(层序遍历加递归) 记录反思
层序遍历,把我层序遍历的公式问题就不大 class Solution { public Node connect(Node root) { Deque<Node> que = new LinkedList<>(); if(root != null) que.offer(root); while(!que.isEmpty()){ int len = que.size(); .
117. 填充同一层的兄弟节点 II
https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/ 和116一样层序 import Queue class Solution: # @param root, a tree link node # @return nothing def connect(self, r...
算法题 填充每个节点的下一个右侧节点指针 II
LeetCode 117题要求在非完美二叉树中填充每个节点的next指针。提供了三种解法:层序遍历(BFS)方法简单直观;优化方法利用已建立的next指针实现O(1)空间复杂度;递归方法效率较低但展示了另一种思路。关键点在于处理不同层级的节点连接,特别是当子树不完整时如何跨子树建立连接。最优解法是空间优化方法,既保证了线性时间复杂度,又避免了额外空间消耗。
【LeetCode】117. Populating Next Right Pointers in Each Node II 解题报告(Python)
【LeetCode】117. Populating Next Right Pointers in Each Node II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/description/ 题目描述: Fol...
LeetCode: 117. Populating Next Right Pointers in Each Node II
LeetCode: 117. Populating Next Right Pointers in Each Node II 题目描述 Follow up for problem “Populating Next Right Pointers in Each Node”. What if the given tree could be any binary tree? Would your p...
524



被折叠的 条评论
为什么被折叠?



