总是在看完别人的代码之后,才发现自己的差距!

我的递归:

先把左侧扁平化,再把右侧扁平化。

然后找到左侧最后一个节点,把右侧移动过去。

然后把左侧整体移到右侧,左侧置为空。

很复杂吧!

如果节点很长的话,这个耗时是很大的。O(n^2) ?差不多了!

菜逼啊!时间估计都错了!!!

时间是多少呢?

while 最左侧的数,会不断被遍历!是这样的。大概会被遍历o(n)次

所以还是O(n^2)?

反正是复杂了。

void flatten(struct TreeNode* root) {
if(root == NULL) return; flatten(root->left); flatten(root->right); if(root->left)
{
struct TreeNode *p = root->left;
while(p -> right)
{
p = p->right;
}
p->right = root->right;
root->right = root->left;
root->left = NULL;
}
return root;
}

看看人家多么行云流水的操作!代码简洁,效率高!没有重复操作!厉害啊!

struct TreeNode *pre = NULL;

void convert(struct TreeNode* root)
{
if(root == NULL) return; convert(root->right);
convert(root->left); root->right = pre;
root->left = NULL;
pre = root;
} void flatten(struct TreeNode *root)
{
pre = NULL;
convert(root);
}

什么思路?

先把右侧变成一个链表,记录下表头。

再把左侧变成链表,右侧的表头作为尾部。

右子树变成左子树的最右儿子的右儿子。

巧妙啊。。。

另外,要注意全局变量每次使用前都要重新初始化。所以外面套了一层。

LeetCode题解:Flatten Binary Tree to Linked List:别人的递归!的更多相关文章

  1. [LeetCode 题解]: Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  2. LeetCode 114| Flatten Binary Tree to Linked List(二叉树转化成链表)

    题目 给定一个二叉树,原地将它展开为链表. 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 解析 通过递归实现:可以用先序遍历, ...

  3. 【LeetCode】Flatten Binary Tree to Linked List

    随笔一记,留做重温! Flatten Binary Tree to Linked List Given a binary tree, flatten it to a linked list in-pl ...

  4. leetcode dfs Flatten Binary Tree to Linked List

    Flatten Binary Tree to Linked List Total Accepted: 25034 Total Submissions: 88947My Submissions Give ...

  5. [LeetCode] 114. Flatten Binary Tree to Linked List 将二叉树展开成链表

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  6. [LeetCode] 114. 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 ...

  7. [Leetcode][JAVA] Flatten Binary Tree to Linked List

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6   ...

  8. 【leetcode】Flatten Binary Tree to Linked List (middle)

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  9. leetcode 114 Flatten Binary Tree to Linked List ----- java

    Given a binary tree, flatten it to a linked list in-place. For example,Given 1 / \ 2 5 / \ \ 3 4 6 T ...

  10. [leetcode]114. 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 ...

随机推荐

  1. 一个源文件可以写出多个class吗?编译后,会不会生成多个class文件?

    会.一个.java源文件里面可以有内部类.其他类(有且仅有一个类可以声明为public),所以编译后,可以有多个class文件.

  2. PTA2016天梯赛决赛3小时训练赛

    7-2 I Love GPLT (5 分) 这道超级简单的题目没有任何输入. 你只需要把这句很重要的话 —— I Love GPLT ——竖着输出就可以了. 所谓“竖着输出”,是指每个字符占一行(包括 ...

  3. SQLServer: 解决“错误15023:当前数据库中已存在用户或角色”

    首先介绍一下sql server中“登录”与“用户”的区别,“登录”用于用户身份验证,而数据库“用户”帐户用于数据库访问和权限验证.登录通过安全识别符 (SID) 与用户关联.将数据库恢复到其他服务器 ...

  4. 第1章 计算机网络和协议(2)_OSI参考模型

    2. OSI参考模型 2.1 OSI参考模型详解 (1)参考模型的优点 ①将网络的通信过程划分为小一些.功能简单的部件,有助于各个部件开发.设计和故障排除. ②通过网络组件的标准化,允许多个供应商进行 ...

  5. linux 安装scala

    1. 下载scala 到scala官网下载scala https://www.scala-lang.org/download/,目前最新版本是2.12.8 wget https://downloads ...

  6. Java - 30 Java 网络编程

    Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接 ...

  7. CS229 6.11 Neurons Networks implements of self-taught learning

    在machine learning领域,更多的数据往往强于更优秀的算法,然而现实中的情况是一般人无法获取大量的已标注数据,这时候可以通过无监督方法获取大量的未标注数据,自学习( self-taught ...

  8. Can't use Subversion command line client***Probably the path to Subversion executable is wrong. Fix

    新同事要入职,赶紧收拾一下电脑:再使用SVNupdate代码时,显示Nothing to show.androidstudio不能使用svn了: 是这样婶滴,报错信息 什么情况: 好了:问题叙述完毕开 ...

  9. oracle提高查询效率的34个方面全解析

    oracle提高查询效率的34个方面全解析   在一个数据库中进行操作的时候,效率是很重要的,那么,如何提高oracle的查询效率呢?笔者将从以下几个方面进行详细解析: 1.选择最有效率的表名顺序(只 ...

  10. [oracle,2017-11-28] 怎么判断oracle数据库中字段是否为空

    要给oracle某个字段插入空值非常简单 insert into table(column) values('') 但是查询的时候通过语句 select * from table where colu ...