Time: 20190901
Type: Medium

题目描述

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

例如,给定二叉树

    1/ \2   5/ \   \
3   4   6

将其展开为:

1\2\3\4\5\6

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

思路

根据结果可知,将树前序遍历后,全用TreeNode结点的右指针相连。所以有一种能AC但是并不是原地变化的做法是:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = Noneclass Solution:def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""if not root:return Noneself.res = []def preorder(root):if not root:return self.res.append(root.val)preorder(root.left)preorder(root.right)preorder(root)if root.left:root.left = Nonetemp = rootfor i in range(1, len(self.res)):node = TreeNode(self.res[i])temp.right = nodetemp = nodeprint(self.res)# 这是造假性质的方法,并不是随心所欲操作指针形成的结果

真正考察我们的方法应该是理解指针的操作方式,修改树中的左右指针达成我们的目的。

代码

class Solution:def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""if not root:returnself.flatten(root.left)self.flatten(root.right)tmp = root.rightroot.right = root.leftroot.left = Nonewhile root.right != None:root = root.rightroot.right = tmp

非递归写法:

class Solution:def flatten(self, root):""":type root: TreeNode:rtype: void Do not return anything, modify root in-place instead."""cur = rootwhile cur:if cur.left:pre = cur.leftwhile pre.right:pre = pre.rightpre.right = cur.rightcur.right = cur.leftcur.left = Nonecur = cur.right

END.

参考

https://blog.csdn.net/qq_17550379/article/details/85220524

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 构造函数中的虚拟成员调用
  2. ORA-01102: cannot mount database in EXCLUSIVE mode
  3. 九九乘法表口诀python-Python 九九乘法表
  4. js中当等于最小值是让代码不执行_网页中JS函数自动执行常用三种方法
  5. Swift函数_默认参数
  6. C语言嵌入式系统编程修炼之内存操作
  7. matlab 高斯迭代代码_主动降噪与双麦降噪原理与实现前篇——LMS算法的matlab实现...
  8. 字符串处理_5个JavaScript的字符串处理库,不再996
  9. https://127.0.0.1:8080/test?param={%22..报错
  10. linux之git高级命令
  11. 由前序遍历和中序遍历确定二叉树
  12. 如何提高matlab的运算速度慢,如何提高MATLAB的运算速度
  13. 微信小程序电子签名实现并识别文字
  14. Latex Beamer 入门教程
  15. 【单片机】51单片机使用总结
  16. 越努力越幸福—2015年度总结
  17. linux pclint配置_PC-lint
  18. 问题:SQL Server数据库不允许更改
  19. Fping命令批量ping地址
  20. CF - 791A. Bear and Big Brother - 模拟

热门文章

  1. 自动驾驶领域常用的数据集(检测,分割,定位)
  2. xbox360 ubuntu14.04连接问题
  3. python 八大排序_python-打基础-八大排序
  4. python动态创建变量
  5. Java jni 底层_JAVA语言语言调用底层语言的技术JNI解析
  6. 微型计算机在机械设计中的应用,浅谈计算机技术在机械设计制造及自动化中的应用.docx...
  7. php 上传进度条api,php如何实现上传进度条
  8. java多线程阶乘_【java学习记录】11.用多线程实现阶乘的计算过程和结果的读取(thread类ReadThread )...
  9. Keras深度学习实战(2)——使用Keras构建神经网络
  10. trie树的数据结构_C / C ++中的Trie数据结构