leetcode114
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的更多相关文章
- [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 ...
- Leetcode114. Flatten Binary Tree to Linked List二叉树展开为链表
给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 class Solution { publ ...
- 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 / \ ...
- leetcode114:valid-sudoku
题目描述 根据数独的规则Sudoku Puzzles - The Rules.判断给出的局面是不是一个符合规则的数独局面 数独盘面可以被部分填写,空的位置用字符'.'.表示 这是一个部分填写的符合规则 ...
随机推荐
- jmeter接口测试基础知识1.0
jmeter:性能测试工具,压测测试计划右键--添加--Threads(Users)--线程组(线程数就是并发数)--右键线程组--添加--Sampler--HTTP请求--最上面的名称可以修改,就是 ...
- idea中文输入法无提示问题的解决
中文输入法无提示问题的解决 双击Shift键打开Search Everywhere,输入Switch Boot JDK,选择 Switch IDE boot JDK...菜单,然后点击...设置Ora ...
- [转]Spark学习之路 (三)Spark之RDD
Spark学习之路 (三)Spark之RDD https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...
- APPlication,Session和Cookie的区别
方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟 ...
- XML一
HTML(HyperText Markup Language),即超文本标记语言,是用于描述网页文档的一种描述标记语言. 而XML(E ...
- java-IO流-字符流-FileReader、FileWriter、自定义小数组的拷贝、BufferedReader、BufferedWriter、readLine()和newLine()方法、LineNumberReader、使用指定的码表读写字符
###21.01_IO流(字符流FileReader) * 1.字符流是什么 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要 ...
- LOJ 2991 「THUSC 2016」补退选——trie+线段树合并或vector
题目:https://loj.ac/problem/2291 想了线段树合并的做法.就是用线段树维护 trie 的每个点在各种时间的操作. 然后线段树合并一番,线段树维护前缀最大值,就是维护最大子段和 ...
- caffe-windows环境配置(github上官方BVLC/caffe的推荐配置方法详解)
[转载来的文章:如有侵权,请联系我!我将马上删除!] 首先声明一下,如标题,本教程是caffe在windows系统上的配置方法,而且是github上官方BVLC/caffe目前推荐的配置方法,并不是使 ...
- python虚拟环境virtualenv简介
参考网站: https://realpython.com/python-virtual-environments-a-primer/ 一. 创建一个新的虚拟环境 # Python 2: $ virtu ...
- 【算法和数据结构】_15_小算法_打印EOF的值
/* 本程序打印EOF的值 */ #include <stdio.h> int main(int argc,char* argv[],char* env) { printf("E ...