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

力扣 hot100 Day47

114. 二叉树展开为链表

给你二叉树的根结点 root ,请你将它展开为一个单链表:

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。

展开后的单链表应该与二叉树 先序遍历 顺序相同。

//抄的
class Solution {
public:void flatten(TreeNode* root) {TreeNode* dummy = new TreeNode();TreeNode* prev = dummy;stack<TreeNode*> st;if (root) st.push(root);while (!st.empty()) {TreeNode* curr = st.top();st.pop();if (curr->right) st.push(curr->right);if (curr->left) st.push(curr->left);prev->right = curr;prev = curr;curr->left = nullptr;}delete dummy;}
};

我自己尝试的做法是,递归调用,想按着先序遍历做,但由于中途会变更根节点,导致回溯时会出现问题,很难解决。

上面的代码中,通过栈来存放先前的节点信息,具体逻辑如下

  1. 将右子节点压栈,再将左子节点压栈(这样左子节点会先出栈)

  2. 每次处理当前节点时,将其连接到前一个节点的右侧

  3. 最后清空左指针

//抄的
class Solution {
public:void flatten(TreeNode* root) {if (!root) return;// 展平左右子树flatten(root->left);flatten(root->right);// 保存原始右子树TreeNode* right = root->right;// 将左子树移到右边root->right = root->left;root->left = nullptr;// 找到当前右子树的最末端TreeNode* curr = root;while (curr->right) {curr = curr->right;}// 将原始右子树接到末端curr->right = right;}
};

递归也是能做的,但需要按后序遍历顺序进行,具体逻辑如下

  1. 先递归展平左右子树

  2. 然后将左子树移到右边

  3. 最后将原始右子树接到新右子树的末端

http://www.dtcms.com/a/284971.html

相关文章:

  • #systemverilog# 关键字之 protected 用法
  • Python在字符串中查找所有匹配字符索引的多种方法 | Python字符串操作教程
  • h264编码总结
  • C语言(20250717)
  • select_shape_proto 用起来很省事
  • 4G模块 A7680通过MQTT协议连接到华为云
  • 广州VR 内容制作报价:各类 VR 内容的报价详情​
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十课——图像还原的FPGA实现
  • 深入理解进程等待:wait的简化与waitpid的灵活性
  • kimi故事提示词 + deepseekR1 文生图提示
  • milvus向量数据库连接测试 和 集合维度不同搜索不到内容
  • windows利用wsl安装qemu
  • 利用deepspeed在Trainer下面微调大模型Qwen2.5-3B
  • SpringBoot01-springBoot的特点
  • 登录功能实现深度解析:从会话管理到安全校验全流程指南
  • 【算法训练营Day13】二叉树part3
  • 【中等】题解力扣21:合并两个有序链表
  • 教你使用bge-m3生成稀疏向量和稠密向量
  • 大语言模型系列(1): 3分钟上手,在骁龙AI PC上部署DeepSeek!
  • 【Lua】题目小练2
  • LIN协议核心详解
  • c++之 KMP 讲解
  • Cocos游戏中UI跟随模型移动,例如人物头上的血条、昵称条等
  • C++中,不能声明为虚函数的函数类型
  • C++进阶-AVL树(平衡二叉查找树)(难度较高)
  • 2025 XYD Summer Camp 7.17 模考
  • Vue.js 响应式原理深度解析:从 Vue 2 的“缺陷”到 Vue 3 的“涅槃重生”
  • OpenVela之网络驱动适配指南
  • JxBrowser 7.43.5 版本发布啦!
  • ​​Sublime Text 2.0.2.2221 安装教程 - 详细步骤指南(附下载与配置)​