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

114. 二叉树展开为链表 --- 头插法(js)

114.二叉树展开为链表 — 头插法(js)

  • 题目描述
  • 关键思路
  • 完整代码

题目描述

114. 二叉树展开为链表

关键思路

  1. 为什么要用头插法?

    遍历顺序是:右 → 左 → 根

    插入顺序就变成:根 → 左 → 右,正好是 先序遍历的顺序。

    优点:

    • 原地修改,不需要辅助栈
    • 空间复杂度 O(1)
  2. 整体上是一个 dfs

  3. 按照 右-左-根 的顺序遍历树节点

  4. 根据题目要求,左子树指向 null, 右子树指向下一个节点(可以理解为上一个已经处理好的链表头)

  5. 然后把新的头节点设置为当前遍历到的根节点

用这个例子描述一下过程:

在这里插入图片描述从最右侧开始拼接链表,处理顺序如下:

node (当前处理节点)head(已经构建好的链表的头节点)操作
6null6.right = null, head = 6
565.right = 6, head = 5
454.right = 5, head = 4
343.right = 4, head = 3
232.right = 3, head = 2
121.right = 2, head = 1

完整代码

var flatten = function(root) {let head = null;function dfs(node) {if (!node)  return;dfs(node.right); // 先处理右子树dfs(node.left);  // 再处理左子树node.left = null; node.right = head; // 当前节点的右指针指向已经处理好的链表头(也就是上一个节点)head = node; // 现在链表头节点是 node}dfs(root);
};

相关文章:

  • SQL关键字三分钟入门: 表结构管理与分区设计。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)
  • 湖北理元理律师事务所:法律框架下的债务优化与生活重建双轨支持
  • 量子级网络通信系统:超维架构下的开发与星际级交互实现,突破传统边界的异构网络通信矩阵系统设计
  • Telerik生态整合:Kendo UI for Angular组件在WinForms应用中的深度嵌入(二)
  • 【算力网络】算网安全
  • 工程师生活:清除电热水壶(锅)水垢方法
  • 记一次jdk版本引起的生产问题
  • 详解鸿蒙Next仓颉开发语言中的全屏模式
  • 【技巧】使用frpc安全地内网穿透ssh访问内网机器
  • AWS数据库迁移实战:本地MySQL零停机上云方案
  • DL___线性神经网络
  • 处理器特性有哪些?
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十五) -> 配置构建(二)
  • C语言笔记(鹏哥)上课板书+课件汇总(KMP算法的动态规划简易处理+字符函数和字符串函数)
  • 【C++特殊工具与技术】联合:节省空间的类
  • QT6与VS下实现没有CMD窗口的C++控制台程序
  • vue3-ts-qrcode :安装及使用记录 / 配置项 / 效果展示
  • 编辑器及脚本案例
  • Android图形系统框架解析
  • 探秘阿里云EBS存储:云计算的存储基石
  • 红河做网站/最好的小说网站排名
  • 国土分局网站建设方案/中国十大流量网站
  • nb-iot网站开发/seo搜索引擎优化课后答案
  • 电影网站如何做长尾关键词/搜外友链平台
  • 个人网站建设需要备案吗/合肥网站seo公司
  • 用安卓做网站/网站建设与管理属于什么专业