题目链接:

114. 二叉树展开为链表 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/

思路:

我是先看的其他人的题解,所以就用他们的题解了。

拿到一个二叉树的题还是考虑“操作+遍历”的思路。通过看图可以发现,操作就是把右子树转到左子树上,然后循环这个过程直到回到了根节点那里为止。那么这个操作只需要几个额外的TreeNode*就能解决,类似于不同链表之间的遍历和插入,所以不需要新加一个操作函数,在本函数内部就能解决。因为要找到右子树对右子树进行操作,所以应该是后序遍历,操作放在后序遍历之后。

那么假设现在已经到了右子树了,该如何进行操作呢?根据题意,操作完后原来root的左子节点是空,而右子节点指向的是左子节点的位置,所以先进行一个嫁接操作,这一步是让右节点指向原来左边的那一串树;之后就需要把右边的分支补到左边的末尾上了,这就相当于一个链表寻尾再尾插的操作了。

如果不太明白,可以用一个最简单的两层二叉树去模拟一下操作的过程,这个明白之后,其余的大支都是这么做的,就能理解了。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:void flatten(TreeNode* root){if(!root){return;}flatten(root->left);flatten(root->right);TreeNode* l=root->left;TreeNode* r=root->right;root->left=NULL;root->right=l;TreeNode* p=root;while(p->right){p=p->right;}//  p=p->right;p->right=r;}
};

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

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

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

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

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

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

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

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

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

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

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

  6. LeetCode 114 二叉树展开为链表

    题目链接:力扣​​​​​​ 思路:递归 递归函数声明: void flatten(TreeNode* root); 递归出口: 如果根节点为空,返回(不操作) 如果只有根节点,返回 (不操作) 递归体 ...

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

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

  8. Leetcode 114. 二叉树展开为链表 解题思路及C++实现

    解题思路: 使用递归的方法.根结点的左子树中,最右边的节点是左子树成为链表后的最后一个节点,找到这个节点,然后把这个节点的右节点指向根结点的右子树,同时,将根结点右子节点指向其左子节点,根结点的左子节 ...

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

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

最新文章

  1. c语言100以内加减乘除,一百以内的加减乘除法游戏....
  2. CentOS上Nginx服务器安装phpmyadmin
  3. 辽宁省普通话水平测试软件,辽宁普通话水平测试报名入口
  4. 7-36 社交网络图中结点的“重要性”计算 (30 分)(思路加详解)兄弟们PTA乙级题目冲起来
  5. 各個瀏覽器CSS樣式控制
  6. android中Sqlite数据库存储
  7. Some Sites About .Net
  8. 怎样让vSAN发挥出高性能、低延迟的威力?
  9. JavaScript高级知识点整理
  10. 智慧环保综合解决方案
  11. 老鱼Python数据分析——篇一:项目立项
  12. matlab 入门 实验,matlab入门实验.doc
  13. 2.4G RFID动物耳标解决方案 SI24R2F+
  14. 《软件技术学研会-技术培训》第0章 操作系统安装
  15. nested exception is java.lang.NoClassDefFoundError:org/sprin
  16. python数据分析的四阶段以及电商数据描述性分析和探索性分析
  17. 全面认识包图,组件图,部署图
  18. Symantec Liveupdate Administrator的搭建
  19. Android 12 分屏模式配置
  20. 使用CSS使div块内容垂直居中的方法

热门文章

  1. Android Shader类简介之渲染图像示例
  2. 算法的优缺点_一文总结机器学习各算法优缺点
  3. ros下的python代码的编写与回调函数
  4. 30秒内限制函数只被调用一次
  5. 使用uiautomator2进行webview页面的测试
  6. SSL/TLS捕包分析
  7. Android(java)学习笔记69:短信发送器
  8. 【Linux】字符转换命令join
  9. flutter Toast消息提示框
  10. Flutter 开发应用第一个页面