失败:Flatten Binary Tree to Linked List
来源:互联网 发布:mac只装win10单系统 编辑:程序博客网 时间:2024/06/10 21:10
问题:
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
12分钟出来的暴力解法,但是导致了Time Limit Exceed
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public void flatten(TreeNode root) {
if (root == null || isLeaf(root)) {
return;
}
root.right = connectFlat(flat(root.left), flat(root.right));
root.left = null;
}
private boolean isLeaf(TreeNode node) {
if (node == null) {
return false;
}
return node.left == null && node.right == null;
}
private TreeNode flat(TreeNode node) {
if (node == null) {
} else if (isLeaf(node)) {
} else if (isLeaf(node.left)) {
TreeNode originRight = node.right;
node.right = node.left;
node.left = null;
node.right.right = flat(originRight);
} else if (isLeaf(node.right)) {
node.right.right = flat(node.left);
} else {
node.right = connectFlat(flat(node.left), flat(node.right));
}
return node;
}
private TreeNode connectFlat(TreeNode node1, TreeNode node2) {
TreeNode currentNode = node1;
if (node1 == null) {
return node2;
}
while (currentNode.right != null) {
currentNode = currentNode.right;
}
currentNode.right = node2;
return node1;
}
}
20分钟 again
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private TreeNode currentNode;
public void flatten(TreeNode root) {
if (root == null) {
return;
}
if (root.left == null && root.right == null) {
return;
}
TreeNode currentNode = root;
TreeNode currentAddNode = root;
while (currentNode != null) {
if (currentNode.left != null) {
TreeNode tempRight = currentNode.right;
currentNode.right = currentNode.left;
findAddNode(currentNode.left).right = tempRight;
currentNode.left = null;
}
currentNode = currentNode.right;
}
}
private TreeNode findAddNode(TreeNode node) {
if (node == null) {
return null;
}
while (node.right != null) {
node = node.right;
}
return node;
}
}
- 失败:Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- [Leetcode] Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- Leetcode: Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- [LeetCode]Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- 《设计模式之禅》学习小结之单例模式,工厂方法模式和抽象工厂模式
- Mininet的简介(介绍)、安装、操作
- 转载--阿里实习生招聘笔试题目
- [Unity3d]u3d中定时器的使用
- 个人学习文件操作的类时的学习笔记
- 失败:Flatten Binary Tree to Linked List
- 胖子哥的大数据之路(7)- 传统企业切入核心or外围
- 10053事件分析案例一则
- [POJ2186]Popular Cows
- 虚拟机VMware下安装CentOS6.4
- LeetCode 66 — Plus One(C++ Java Python)
- 住建部:针对城镇居民及常住人口住房问题提两个新政策
- webrtc 学习笔记--libjingle 部分(P2P传输)
- 另一种实现“饥汉”与“懒汉”