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

【LeetCode面试经典150题】117. 填充每个节点的下一个右侧节点指针 II

一、题目

  • 117. 填充每个节点的下一个右侧节点指针 II - 力扣(LeetCode)
  • 给定一个二叉树:

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

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

二、思路

  1. 由于涉及树的层级遍历,应该使用深度优先搜索,这样可以方便的操作同一层的数据;
  2. 建立一个List用于存放树每层的当前操作节点,便于操作其next结点;
  3. 先dfs左子树,并将搜索到的数据放入List中,此时List的大小即为树的深度,且其中的元素即为树的不同深度的最左端点;
  4. dfs触底为null即返回,此时开始检索最底层的右子树,层层向上检索,每检索到一个结点,就将数组中存放的结点next值设置为当前结点,并更新数组当前深度的元素为当前结点,如此递归至右子树的最右一个null结点为止,next都被填充完成;

三、解法

解法一

class Solution {private final List<Node> NODE_LIST = new ArrayList<>();public Node connect(Node root) {dfs(root, 0);return root;}private void dfs(Node node, Integer depth) {if (node == null) {return;}if (depth == NODE_LIST.size()) {// 1. 现在的node是最深一层的最左边的结点NODE_LIST.add(node);} else {// 2. 现在的node是最左边结点的next结点NODE_LIST.get(depth).next = node;// 3. 更新当前node为node.nextNODE_LIST.set(depth, node);}dfs(node.left, depth + 1);dfs(node.right, depth + 1);}
}

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

相关文章:

  • RTDETR更换优化器——Lion
  • Spring Boot中最佳实践:数据源配置详解
  • 第1章 物联网模式简介---独特要求和体系结构原则
  • 数据挖掘概览
  • 【学习】软件测试中常见的文档类型及其作用
  • electron的托盘Tray
  • Harmony OS UI框架探索笔记
  • transformers evaluate
  • 【ONLYOFFICE深度探索】:ONLYOFFICE桌面编辑器8.1震撼发布,打造高效办公新境界
  • C++系统相关操作4 - 获取CPU(指令集)架构类型
  • whisper 实现语音转文字
  • 使用VLLM部署llama3量化版
  • 计算机缺失OpenCL.dll怎么办,OpenCL.dll丢失的多种解决方法
  • git 本地代码管理
  • Docker(九)-Docker运行redis6.0.8容器实例
  • 似然 与 概率
  • Tableau数据可视化与仪表盘搭建
  • web前端——HTML
  • C++的模板(九):模板的实例化问题
  • Clickhouse Projection
  • 放烟花短视频素材去哪里找?去哪里下载?烟花素材网分享
  • 爬虫笔记14——爬取网页数据写入MongoDB数据库,以爱奇艺为例
  • Jenkins教程-10-发送飞书测试报告通知
  • Swift开发——简单App设计
  • Python操作mysql
  • 监控易产品升级动态:V7.6.6.15版本全面升级
  • Vue3 + Element-plus + TS —— 动态表格自由编辑
  • 虚拟机配置桥接模式
  • 星戈瑞DSPE-SS-PEG-CY7近红外花菁染料
  • LeetCode:503. 下一个更大元素 II(Java 单调栈)