给定一个二叉树,原地将它展开为一个单链表。

例如,给定二叉树

1
   / \
  2   5
 / \   \
3   4   6
将其展开为:

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

感谢 林小鹿 大佬的详细解法,传送门 二叉树展开为链表 | 图解树的遍历 | 代码简洁易懂 【C++/Java版本】

class Solution {public void flatten(TreeNode root) {
//            flattenI(root);
//            flattenII(root);//方法三:迭代//时间复杂度O(N),空间复杂度O(1)if (root == null) {return;}TreeNode cur = root;while (cur != null) {//右子树不需要展开,展开左子树TreeNode node = cur.left;if (node != null) {//找到左子树的最右节点while (node.right != null) {node = node.right;}//将原来的右子树接到左子树的最右边节点node.right = cur.right;//将左边的树放到右边cur.right = cur.left;//左边置为nullcur.left = null;}cur = cur.right;}}//方法二:前序遍历,遍历过程中修改节点的右指针方向//时间复杂度O(N),空间复杂度O(N)private void flattenII(TreeNode root) {if (root == null) {return;}Stack<TreeNode> stack = new Stack<>();stack.push(root);TreeNode prev = null;while (!stack.isEmpty()) {TreeNode node = stack.pop();//每遍历一个节点就将上一节点的右指针指向当前节点if (prev != null) {prev.right = node;prev.left = null;}if (node.right != null) {stack.push(node.right);}if (node.left != null) {stack.push(node.left);}prev = node;}}//方法一:递归//时间复杂度O(N),空间复杂度O(N)private void flattenI(TreeNode root) {if (root == null) {return;}//理解递归函数的含义:将二叉树展开为单链表//分别展开左子树和右子树flatten(root.left);flatten(root.right);//展开为链表的右子树TreeNode temp = root.right;//将树的左边放到右边root.right = root.left;//左边置为nullroot.left = null;while (root.right != null) {root = root.right;}//将右子树的链表放到左子树链表的最右边root.right = temp;}}

Leetcode刷题114. 二叉树展开为链表相关推荐

  1. 【LeetCode笔记】114. 二叉树展开为链表(Java、递归)

    文章目录 题目描述 解法 & 思路 思路一 思路二 题目描述 我佛了,这道题挺描述不明的,有坑,过不了oj建议马上看评论 or 题解 解法 & 思路 思路一 代码就不贴了,过不去 先序 ...

  2. java二叉树转换为链表_leetcode刷题笔记-114. 二叉树展开为链表(java实现)

    leetcode刷题笔记-114. 二叉树展开为链表(java实现) 题目描述 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 rig ...

  3. 【LeetCode】【HOT】114. 二叉树展开为链表(原地置换)

    [LeetCode][HOT]114. 二叉树展开为链表 文章目录 [LeetCode][HOT]114. 二叉树展开为链表 package hot;import java.util.ArrayLis ...

  4. 力扣114. 二叉树展开为链表(C++,解释一下别人的思路)

    题目链接: 114. 二叉树展开为链表 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/flatten-binary- ...

  5. 114. 二叉树展开为链表 golang

    114. 二叉树展开为链表 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1/ \2 5/ \ \ 3 4 6 将其展开为: 1\2\3\4\5\6 Code /*** Definition ...

  6. [Leetcode][第114题][JAVA][二叉树展开为链表][递归][迭代]

    [问题描述][中等] [解答思路] 1. 前序遍历 将二叉树展开为单链表之后,单链表中的节点顺序即为二叉树的前序遍历访问各节点的顺序.因此,可以对二叉树进行前序遍历,获得各节点被访问到的顺序. 由于将 ...

  7. LeetCode 114. 二叉树展开为链表(递归)

    1. 题目 给定一个二叉树,原地将它展开为链表(右侧路径). 例如,给定二叉树1/ \2 5/ \ \ 3 4 6 将其展开为:1\2\3\4\5\6 来源:力扣(LeetCode) 链接:https ...

  8. Leetcode 114.二叉树展开为链表

    Time: 20190901 Type: Medium 题目描述 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1/ \2 5/ \ \ 3 4 6 将其展开为: 1\2\3\4\5\6 来 ...

  9. LeetCode刷题笔记 二叉树 二叉搜索树的操作

    669 修剪二叉搜索树 ​ 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. ​ 输入是一个二叉查找树和两个整数 ...

  10. leetocde —— 114. 二叉树展开为链表

    给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 -------- 解题思路:借鉴windliang发布在leetcode题解上的第一个思路,利用先序遍历,将二叉树展开成一个链表. 将左子树插入 ...

最新文章

  1. 用leangoo看板工具做可视化工作流
  2. 删除中间结点(直接用来当前节点操作)
  3. 关于未能映射路径问题
  4. linux间隔时间执行,科技常识:使用linux命令crontab间隔时间执行其它命令
  5. JVM - 解读GC中的 Safe Point Safe Region
  6. java读取mysql的图片_用JAVA写入和读取MYSQL的图片的实例
  7. Innodb ibdata数据文件误删,如何恢复
  8. 简易的深度学习框架Keras代码解析与应用
  9. 懒省事的小明(优先队列)
  10. 【算法导论】第15章动态规划
  11. ASP.NET 路由实现页面静态化(附在线Demo和Source)
  12. java保留小数点后两位_JAVA中小数点后保留两位的方法有哪些
  13. 一个手机号码如何注册多个百度账号
  14. [工具]实现文件夹和文件名称批量修改
  15. vmware使用显卡 | vmware切换显卡 | vmware显卡配置
  16. MacBook如何安装双系统?
  17. smartbi v7 Linux,安装Smartbi
  18. 打印机后台服务器修复,打印机后台服务程序被禁用怎么修复?
  19. 什么是纹波、噪声、过冲、回沟?
  20. 我女儿说要看雪,于是我默默的拿起了键盘,下雪咯,程序员就是可以为所欲为!

热门文章

  1. 抓取百度搜狗相关搜索、筛选文本相似度最高的相关搜索(PHP)
  2. Spring4 Spring MVC实战(一)——读《Spring in action》搭建最简单的MVC
  3. 硬件蓝牙测试软件,【原创】聊聊蓝牙测试专用硬件工具-Ubertooth
  4. 大一计算机课程学什么,大一新生应该如何学习 主要学什么课程
  5. 新机器部署linux系统(非虚拟机)
  6. U3D教程多摄像机协同运行
  7. 【uni-app】模仿微信实现简易发送/取发语音功能
  8. VR测试视频源,双目立体视觉测试视频,大分辨率2880x1440-25fps
  9. Batch Normalization论文翻译——中英文对照
  10. 【OUC深度学习入门】第4周学习记录:MobileNetV1, V2, V3