class Solution {
public:
void flatten(TreeNode* root) {
while(root){
if(root->left){
TreeNode* pre=root->left;
while(pre->right){
pre=pre->right; }
pre->right=root->right;
root->right=root->left;
root->left=nullptr;
}
root=root->right;
}
}
};

补充一个DFS遍历,然后倒叙组装成类似链表的解决方案,使用python实现:

class Solution:
def preOrder(self,root,l):
if root != None:
l.append(root) self.preOrder(root.left,l)
self.preOrder(root.right,l) def flatten(self, root: 'TreeNode') -> 'None':
if root == None:
return
l = list()
self.preOrder(root,l)
root = l[len(l)-1]
for i in range(len(l)-2,-1,-1):
l[i].left = None
l[i].right = root
root = l[i]

python的递归实现:

 class Solution:
def build(self,root):
if root != None:
if root.left != None and root.right != None:
right = self.build(root.right)#重建右子树
left = self.build(root.left)#重建左子树
leaf = left
while leaf.right != None:#找到左子树的叶子节点
leaf = leaf.right
leaf.right = right#右子树连接到左子树的末尾
root.right = left#根节点修改右子树
root.left = None#根结点左子树设为空
return root
elif root.left != None and root.right == None:
root.right = self.build(root.left)
root.left = None
return root
elif root.left == None and root.right != None:
root.right = self.build(root.right)
return root
else:
return root
return None def flatten(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
self.build(root)

leetcode114的更多相关文章

  1. [Swift]LeetCode114. 二叉树展开为链表 | Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example, given the following tree: 1 ...

  2. Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表

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

  3. LeetCode114 Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. (Medium) For example,Given 1 / \ 2 5 / \ ...

  4. leetcode114:valid-sudoku

    题目描述 根据数独的规则Sudoku Puzzles - The Rules.判断给出的局面是不是一个符合规则的数独局面 数独盘面可以被部分填写,空的位置用字符'.'.表示 这是一个部分填写的符合规则 ...

随机推荐

  1. jmeter接口测试基础知识1.0

    jmeter:性能测试工具,压测测试计划右键--添加--Threads(Users)--线程组(线程数就是并发数)--右键线程组--添加--Sampler--HTTP请求--最上面的名称可以修改,就是 ...

  2. idea中文输入法无提示问题的解决

    中文输入法无提示问题的解决 双击Shift键打开Search Everywhere,输入Switch Boot JDK,选择 Switch IDE boot JDK...菜单,然后点击...设置Ora ...

  3. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

  4. APPlication,Session和Cookie的区别

    方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟 ...

  5. XML一

    HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言.                                  而XML(E ...

  6. java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符

    ###21.01_IO流(字符流FileReader) * 1.字符流是什么     * 字符流是可以直接读写字符的IO流     * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...

  7. LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector

    题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...

  8. caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)

    [转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...

  9. python虚拟环境virtualenv简介

    参考网站: https://realpython.com/python-virtual-environments-a-primer/ 一. 创建一个新的虚拟环境 # Python 2: $ virtu ...

  10. 【算法和数据结构】_15_小算法_打印EOF的值

    /* 本程序打印EOF的值 */ #include <stdio.h> int main(int argc,char* argv[],char* env) { printf("E ...