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.判断给出的局面是不是一个符合规则的数独局面 数独盘面可以被部分填写,空的位置用字符'.'.表示 这是一个部分填写的符合规则 ...
随机推荐
- ionic1 添加百度地图插件 cordova-plugin-baidumaplocation
cordova-plugin-baidumaplocation 这个插件返回的数据是 json 格式的 可以直接获取 android 和 ios 都可用 1.先去百度地图平台去创建应用 获取访问 ...
- noj装载问题
描述 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入 多个测例,每个测例的输入占 ...
- Windows 应用商店无法下载---启动更新
今天想在应用商店下载东西,但是以直没成功,查看原因结果是因为我的Windows自动更新关了. 百度,如何打开自动更新,要打开本地组策略编辑器,但是我是Windows家庭版,,,没有这个东西,, 最后, ...
- jenkins 持续集成iOS开发
持续集成即Continuous Integration,简称CI 1,安装jenkins,brew install jenkins 2,在浏览器输入localhost:8080会出现一个网页,要求输入 ...
- Xcodebuild ipa shell
命令行下打包iOS App工程: #!/bin/sh # # How To Build ? #http://www.jianshu.com/p/3f43370437d2 #http://www.jia ...
- “必须执行Init_Clk函数,才能采集到二氧化碳接口485数据的问题”的解决
这个问题困扰了我很长一段时间,而且如果这个问题不解决,就有一个无法调和的矛盾:执行Init_Clk函数,能采集到二氧化碳接口485数据,但是功耗大:不执行Init_Clk函数,不能采集到二氧化碳接口4 ...
- 535种使用JavaScript重新加载页面的方法
除了location = location之外还有534中方法重新加载页面 location = location location = location.href location = window ...
- linux基础命令一
linux基础命令一 1.date命令 date命令介绍:显示或者设置系统日期 date命令的语法: 显示日期:date [options...] [+FORMAT] FORMAT:为显示日期的格 ...
- Visual Studio AI 离线模型训练(Windows10)
一.序 环境搭建:[查看] samples-for-ai项目下载:[下载],两个版本,一个2018年6月15日前,一个2018年6月15日-16日版本(当前最新版本). 在环境搭建过程中,通过git ...
- Linux进程调度与抢占
一.linux内核抢占介绍 1.抢占发生的必要条件 a.preempt_count抢占计数必须为0,不为0说明其它地方调用了禁止抢占的函数,比如spin_lock系列函数.b.中断必须是使能的状态,因 ...