Flatten Binary Tree to Linked List

原题链接Flatten Binary Tree to Linked List

给定一个二叉树,将其原地平铺成链式结构(按先序遍历的方式平铺)

虽然结果是先序遍历,但是本题不能直接在二叉树上进行先序遍历操作,原因是题目要求在原内存上做修改,也就是说只能改变节点的left和right指针

遇到二叉树的问题,首先想到的就是递归,所以本题仍然需要利用递归求解

对于某个节点,假设它的左右子树都已经按要求转换完毕,那么只需要将这两个子树拼接在一起即可

代码如下

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:void flatten(TreeNode* root) {flattenTree(root);  }
private:/* 返回以root为根节点的子树平铺后的树根节点 */TreeNode* flattenTree(TreeNode* root){if(!root)   return nullptr;/* 转换左子树 */TreeNode* leftTree = flattenTree(root->left);/* 转换右子树 */TreeNode* rightTree = flattenTree(root->right);/* 找到左子树的最后一个节点 */TreeNode* leftLastNode = leftTree;while(leftLastNode && leftLastNode->right)leftLastNode = leftLastNode->right;/* 将左子树从根节点中移除(因为要移动到右边) */root->left = nullptr;/* 只有当左子树不为空时才需要转换,当为空时,右子树位置不需要变化 */if(leftTree){/* 根节点的左子树作为新的右子树 */root->right = leftTree;/* 左子树连接右子树 */leftLastNode->right = rightTree;}/* 返回当前根节点 */return root;}
};

本题还是利用递归,以后遇到二叉树的问题,最好首先考虑递归求解

每天一道LeetCode-----将二叉树原地平铺成链式结构相关推荐

  1. 单链表原地逆转 c语言,链式结构线性表的实现(二)

    链式结构线性表的实现(二) 一.目的: 掌握链表的表示方法,存储结构及其基本操作的实现,灵活使用链表. 二.要求: 修改实验三的程序,完成 (1)实现带头接点的单链表的原地逆转(结果链表仍使用原链表的 ...

  2. 【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)

    本章我们将引入树的概念并详细介绍二叉树.我们会在介绍顺序二叉树基础上,进一步介绍堆以及堆的实现,并以此为依据详解topK排序.堆排等问题:然后我们会介绍链式二叉树的实现以及各种操作.最后,我们也会给出 ...

  3. 二叉树的链式结构的非递归遍历

    二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1.    Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...

  4. 二叉树的链式结构递归遍历实现

    二叉树的链式结构递归遍历实现 1.     BinTree.h文件 #ifndef__BINTREE_H__ #define__BINTREE_H__ #include<stdio.h> ...

  5. 【数据结构初阶】第八篇——二叉树的链式结构(二叉树的前、中和后序遍历+层序遍历+链式结构的实现+相关简单的递归问题)

    ⭐️本篇博客我要来和大家一起聊一聊数据结构中的二叉树的链式结构的实现及相关的一些问题的介绍 ⭐️博客代码已上传至gitee:https://gitee.com/byte-binxin/data-str ...

  6. 顺序二叉树(堆)与链式二叉树的C语言实现

    文章目录 树的概念及结构 树的概念 树的相关概念 树的表示 树在实际中的运用 二叉树的概念及结构 二叉树的概念 现实中的二叉树 特殊的二叉树 二叉树的性质 二叉树的存储结构 二叉树的顺序结构及实现 二 ...

  7. 将顺序二叉树存储序列转化为链式存储序列-c语言

    将顺序二叉树存储序列转化为链式存储序列 - 题目描述: 将给定顺序二叉树存储序列转换为链式二叉树存储序列显示 char data[13] = {'0','A','B','C','0','D','E', ...

  8. 二叉树链式结构的实现

    目录 1.二叉树链式结构的实现 1.1前置说明 1.2二叉树的遍历 1.2.1前序.中序以及后序遍历 1.2.2层序遍历 1.3二叉树节点个数及高度等 1.4二叉树的创建和销毁 1.5完全二叉树的判断 ...

  9. Java 平铺列表转为树形结构

    在业务中往往有一些数据是有层级结构的,比如数据表中原始数据如下形式 id name parentId 1 1 null 2 1-1 1 3 1-1-1 2 4 1-1 1 想要将平铺的数据变成有层次的 ...

最新文章

  1. HDU-1268 找新朋友 (素数筛选)
  2. RocketMQ命令整理
  3. 从谷歌辞职后,作为独立开发者的第三年,我从年入 3 万做到了年入 40 万
  4. Android新权限机制 AppOps
  5. 排序算法的python实现
  6. 不能错过的RTS经典:《蘑菇战争2》是如何做玩法创新的?
  7. 《十天学会单片机和C语言编程》
  8. 【XAMPP启动mysql报错】Port 3306 in use by ““C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld“……
  9. 计算空间中点到直线的距离
  10. 【保研】2021南京大学计算机夏令营笔试面试笔记
  11. Android热修复Tinker原理分析
  12. Discord教程:Discord账号注册、Discord多账号登录和管理
  13. python统计元音字母个数_统计字符串中各元音字母(即A,E,I,O,U)的个数。
  14. 用Python批量下载视频
  15. kafka 四:(设计模式)Kafka数据上传至Hbase
  16. 人民邮电出版社专访刘遄老师:不做技术的搬运工。
  17. 买《Python数据分析师:从0基础到数据分析达人》专题视频课程送纸质图书
  18. 一套效果图适配(Android和IOS)全尺寸和标注规范-(三)(360x640)
  19. 驾驭你的“职场布朗运动”
  20. maya 2017 linux 下载,适用于Maya 2017 2018和2019的NifTools插件

热门文章

  1. HTML语言怎么晋升,学会提问,对你的职场晋升有很大的帮助
  2. 程序员面试100题之十三:求二叉查找树的镜像
  3. 一图看懂hadoop分布式文件存储系统HDFS工作原理
  4. Python进行数据分析—可视化之seaborn
  5. 在web.config中配置httpHandlers节点是的说明
  6. TabActivity中的Tab标签详细设置
  7. Android 基本事件及对话框
  8. MS-SQL中的事务
  9. linux命令管理GPT分区,Linux磁盘管理GPT分区教程
  10. iOS之深入解析对象isa的底层原理