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

[leetcode]Flatten Binary Tree to Linked List

 

class Solution {
public:
    //目的是将binary tree变成前序遍历的list,但是变换过程是后序遍历
    void flatten(TreeNode *root, TreeNode *&first, TreeNode *&last){
        if (!root)
            return ;

        TreeNode *leftFirst = NULL;
        TreeNode *leftLast = NULL;
        TreeNode *rightFirst = NULL;
        TreeNode *rightLast = NULL;
        flatten(root->left, leftFirst, leftLast);        //对于向下调用问题,递归的先处理子树
        flatten(root->right, rightFirst, rightLast);    //对于向下调用问题,递归的先处理子树

        first = root;                                    //对于向上返回问题,first肯定是root
        if (root->right)                                //如果有右子树
            last = rightLast;
        else if (root->left)                            //没有右子树但是有左子树
            last = leftLast;
        else                                            //没有子树
            last = root;

        root->left = NULL;
        if (leftFirst && !rightFirst){
            root->right = leftFirst;
        }
        else if (!leftFirst && rightFirst){
            root->right = rightFirst;
        }
        else if (leftFirst && rightFirst){
            root->right = leftFirst;
            leftLast->right = rightFirst;
        }
        else{
            root->right = NULL;
        }
    }

    void flatten(TreeNode *root) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (!root)
            return ;

        TreeNode *first;
        TreeNode *last;
        flatten(root, first, last);

    }
};

 

 

 

 

 

 

EOF

相关文章:

  • 深度学习中常见问题
  • 华为云:如何解除数据库高并发场景下的达摩克利斯之剑?
  • Tomcat的参数配置及一般问题的解决
  • node.js来爬取智联全国的竞争最激烈的前十岗位
  • css颜色代码大全:(网页设计师和平面设计师常用)
  • python3.6+scrapy+mysql 爬虫实战
  • 数据库分库分表思路
  • linux考试
  • 在路上 - 精选
  • perl anyevent
  • 2018全球互联网经济大会,春季峰会在南京开幕
  • 不止于IaaS,运营商要用PaaS构筑生态竞争力
  • 分享:使用 Raspberry Pi 远程桌面
  • 通过5个研发机构,南京开发区“裂变”出了153家企业
  • libevent入门教程:Echo Server based on libevent
  • ➹使用webpack配置多页面应用(MPA)
  • JavaScript函数式编程(一)
  • JavaScript类型识别
  • java第三方包学习之lombok
  • Lsb图片隐写
  • PermissionScope Swift4 兼容问题
  • React-flux杂记
  • storm drpc实例
  • Theano - 导数
  • Vue2.x学习三:事件处理生命周期钩子
  • 闭包,sync使用细节
  • 浮动相关
  • 给初学者:JavaScript 中数组操作注意点
  • 回流、重绘及其优化
  • 前端临床手札——文件上传
  • 小程序开发之路(一)
  • 带你开发类似Pokemon Go的AR游戏
  • ​configparser --- 配置文件解析器​
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #etcd#安装时出错
  • #WEB前端(HTML属性)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (4)logging(日志模块)
  • (arch)linux 转换文件编码格式
  • (C语言)逆序输出字符串
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣)1314.矩阵区域和
  • (十五)使用Nexus创建Maven私服
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net wcf memory gates checking failed
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net 应用中使用dot trace进行性能诊断
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @GetMapping和@RequestMapping的区别