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

leetcode114-二叉树展开为链表

leetcode 114

在这里插入图片描述

思路

用简单例子推导规律

不要一开始就看复杂的树,先从最简单的情况入手

案例一:只有一个节点
输入:1
输出:1

不需要任何操作,直接返回

案例二:有两个节点
输入:   1/2输出:1→2

步骤:

  • 把左子树(2)移到右边
  • 左子树指针设为 null
案例三:有三个节点
输入:   1/ \2   3输出:1→2→3

步骤:

  • 把左子树(2)移到右边
  • 找到新右子树(2)的最右节点
  • 把原右子树(3)接到最右节点后面

画出转换过程

原树:1/ \2   3第一步:移左子树到右边1\2/ \
null   3第二步:找到最右节点(2)1\2\3第三步:左指针设为null1\2\3

已经知道如何展开左子树和右子树,如何利用这些结果展开当前树?

分治思想

  • 先展开左子树(得到链表 A)
  • 再展开右子树(得到链表 B)
  • 把链表 A 接到根节点右边
  • 找到链表 A 的末尾
  • 把链表 B 接到 A 的末尾
const deep = (root) => {if (!root) return null;// 递归展开左子树const left = deep(root.left);// 递归展开右子树const right = deep(root.right);// 处理当前节点:将左子树放到右子树的位置};

如何实现 “移左接右” 操作

  • 保存原左右子树
  • 将左子树移到右子树位置
  • 找到新右子树的最右节点
  • 将原右子树接到最右节点
if (left) {root.right = left;root.left = null;// 寻找左子树的最右节点let cur = root;while (cur.right) {cur = cur.right;}// 将右子树连接到左子树的最右节点cur.right = right;}

实现

var flatten = function (root) {const deep = (root) => {if (!root) return null;// 递归展开左子树const left = deep(root.left);// 递归展开右子树const right = deep(root.right);// 处理当前节点:将左子树放到右子树的位置if (left) {root.right = left;root.left = null;// 寻找左子树的最右节点let cur = root;while (cur.right) {cur = cur.right;}// 将右子树连接到左子树的最右节点cur.right = right;}return root;};return deep(root);
};

相关文章:

  • 成立一家公司的基本流程指定关键词排名优化
  • 男女做爰视频免费网站百度seo排名查询
  • 佛山制作网站百度收录申请入口
  • 网站建设接私活平台seo每天一贴博客
  • 拍拍网的网站建设公司网站制作要多少钱
  • 洛阳市网站建设免费做网站推广的软件
  • `docker run -it --rm` 笔记250624
  • 论文笔记(八十六)V-HOP: Visuo-Haptic 6D Object Pose Tracking
  • vue 3 计算器
  • MySql:DDL,增删改查:创建表
  • 【大模型学习】项目练习:套壳DeepSeek
  • 火山 RTC 引擎14 设置CB
  • (LeetCode 面试经典 150 题 )121. 买卖股票的最佳时机 (遍历)
  • 自然语言处理入门
  • 【开源项目】比 PyInstaller 更方便:图形界面打包 Python 脚本的体验
  • 工程优化——WebSocket、WSS(WebSocket Secure)和SSE(Server-Sent Events)通信对比
  • PyEcharts教程(009):PyEcharts绘制水球图
  • 常见网络知识,宽带、路由器
  • 【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )
  • 内存泄漏和内存溢出的区别
  • 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
  • 使用 PyFluent 自动化 CFD
  • FPGA基础 -- Verilog 验证平台之 **cocotb 验证 `阶乘计算模块(factorial)` 的例子**
  • CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
  • 用vscode破解最新typora1.10.8
  • 前端vue2每三十秒被动接受后端服务器发送过来得数据