博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
114. Flatten Binary Tree to Linked List
阅读量:6544 次
发布时间:2019-06-24

本文共 2398 字,大约阅读时间需要 7 分钟。

题目:

Given a binary tree, flatten it to a linked list in-place.

For example,

Given

1        / \       2   5      / \   \     3   4   6

 

The flattened tree should look like:

1    \     2      \       3        \         4          \           5            \             6

Hints:

If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.

链接: 

题解:

使用栈来辅助,很像先序遍历。也可以用recursive和Morris-travel。

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {    public void flatten(TreeNode root) {        if(root == null)            return;        Stack
stack = new Stack
(); TreeNode node = root; while(node != null || !stack.isEmpty()){ if(node.right != null){ stack.push(node.right); } if(node.left != null){ node.right = node.left; node.left = null; } else { if(!stack.isEmpty()) node.right = stack.pop(); } node = node.right; } }}

 

二刷:

先建立一个Stack<TreeNode>(), 再取得一个root的reference node。在root != null并且!stack.isEmpty()的情况下进行遍历。

假如右子树非空,则入栈。  

假如左子树非空,则将左子树放到右子树处,置空左子树。 否则左子树为空时,假如stack非空,则我们设置node.right = stack.pop();

将node移动一位 - node = node.right。

Discuss区有很多好解法。下次一定要补上recursive的。

Java:

Time Complexity - O(n), Space Complexity - O(n)。

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public void flatten(TreeNode root) {        Stack
stack = new Stack<>(); TreeNode node = root; while (node != null) { if (node.right != null) stack.push(node.right); if (node.left != null) { node.right = node.left; node.left = null; } else if (!stack.isEmpty()){ node.right = stack.pop(); } node = node.right; } }}

 

Reference:

https://leetcode.com/discuss/30719/my-short-post-order-traversal-java-solution-for-share

https://leetcode.com/discuss/17944/accepted-simple-java-solution-iterative

https://leetcode.com/discuss/27643/straightforward-java-solution

https://leetcode.com/discuss/13054/share-my-simple-non-recursive-solution-o-1-space-complexity

转载地址:http://yrodo.baihongyu.com/

你可能感兴趣的文章
QLabel显示图片,图片可以自适应label的大小
查看>>
阅读下面程序,请回答如下问题:
查看>>
BZOJ3994:[SDOI2015]约数个数和——题解
查看>>
3、EJB3.0开发第一个无会话Bean和客户端(jboss4.2.3)
查看>>
git fetch & pull详解
查看>>
优酷2013.3去广告 不黑屏
查看>>
web入门、tomcat、servlet、jsp
查看>>
boost_1.63.0编译VS2013
查看>>
mysql查看每个数据库所占磁盘大小
查看>>
jQuery 插件-(初体验一)
查看>>
PHP语言 -- Ajax 登录处理
查看>>
基于js的CC攻击实现与防御
查看>>
Largest Rectangle in a Histogram
查看>>
树状数组模板
查看>>
我的家庭私有云计划-19
查看>>
项目实践中Linux集群的总结和思考
查看>>
关于使用Android NDK编译ffmpeg
查看>>
监控MySQL主从同步是否异常并报警企业案例模拟
查看>>
zabbix从2.2.3升级到最新稳定版3.2.1
查看>>
我有一个网站,想提高点权重
查看>>