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

例如,给定二叉树

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

1
 \
  2
   \
    3
     \
      4
       \
        5
         \
          6

思路1:这里暂不考虑题目要求的原地转换,可以先先序遍历二叉树保存节点,然后遍历节点,left均置为null,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:vector<TreeNode*> list;void flatten(TreeNode* root) {if(root==NULL)return;TreeNode* temp_root = root;prefirst(temp_root);int n = list.size();for(int i=0;i<n-1;++i){list[i]->right = list[i+1];list[i]->left = NULL;}list[n-1]->right = NULL;list[n-1]->left = NULL;root = list[0];}void prefirst(TreeNode* root){if(root){list.push_back(root);prefirst(root->left);prefirst(root->right);}}
};

思路2: 先利用DFS的思路找到最左子节点,然后回到其父节点,把其父节点和右子节点断开,将原左子结点连上父节点的右子节点上,然后再把原右子节点连到新右子节点的右子节点上,然后再回到上一父节点做相同操作。

/*** 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:vector<TreeNode*> list;void flatten(TreeNode* root) {if (root==NULL)return;if (root->left) flatten(root->left);if (root->right) flatten(root->right);TreeNode *tmp = root->right;root->right = root->left;root->left = NULL;while (root->right) root = root->right;root->right = tmp;}
};

二叉树展开为链表—leetcode114相关推荐

  1. 114. Flatten Binary Tree to Linked List 二叉树展开为链表

    给定一个二叉树,原地将它展开为一个单链表. 例如,给定二叉树 1/ \2 5/ \ \ 3 4 6 将其展开为: 1\2\3\4\5\6 前序遍历 将二叉树展开为单链表之后,单链表中的节点顺序即为二叉 ...

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

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

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

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

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

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

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

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

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

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

  7. 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先

    前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...

  8. leetcode--114 二叉树展开为链表

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

  9. leetcode114. 二叉树展开为链表

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

最新文章

  1. 消息中间件客户端消费控制实践
  2. ASP.NET - 截取固定长度字符串显示在页面,多余部分显示为省略号
  3. 笔记-项目立项管理-项目论证的程序
  4. CentOS7安装MySQL(完整版)
  5. 应届生求职数据分析师指南
  6. 如何获取 SAP Commerce Cloud Spartacus UI 购物车 Cart 的加载状态
  7. Spring Bean Scope 有状态的Bean 无状态的Bean
  8. 使用Hazelcast发布和订阅
  9. ssh登陆报错“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”的解决方法
  10. Groovy语言之SpringBoot整合JDBC案例
  11. 将本地已经存在的代码跟github上新建的仓库建立关联,解决“fatal: 'origin' does not appear to be a git repository...”
  12. Python AES
  13. JAVA类的无参方法
  14. gc日志怎么看_JVM探秘:GC日志收集与分析
  15. 金山毒霸喜新厌旧 推荐QQ电脑管家抛弃金山卫士?
  16. 计算机组装维修中级试题,维修电工中级培训考试题及答案
  17. 斐讯k2路由虚拟服务器,斐讯K2T分离式无线路由器 新思路解决老问题(无线信号那些事)...
  18. Python解析CDD文件
  19. Spark 连接kafka报错: Error while fetching metadata with correlation id xx [topicName=INVALID_REPLICATIO]
  20. 万字长文 | 面向k8s编程,如何写一个Operator

热门文章

  1. 计算机音乐乐谱再也没有,再也没有简谱-Ryan.B/杨佬叁演唱-孙世彦制谱
  2. c++ STL find search
  3. python初步学习-查看文档及数据类型转换
  4. 浅谈 温故知新——HTML5!
  5. win系统注册缺少的库 32位系统 64位系统
  6. 中文Ubuntu主目录下的文档文件夹改回英文
  7. 制作WEB在线编辑器-插入HTML标签
  8. JAVA WEB_中间件
  9. php extname shared,PHP: 编写第一个PHP扩展
  10. [网络安全自学篇] 三十三.文件上传之绕狗一句话原理和绕过安全狗(六)