前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。
博客链接:mcf171的博客
——————————————————————————————
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这个题目比较醉,一开始没看题,以为是广度优先压缩,结果是先序遍历的压缩。 Your runtime beats 3.93% of java submissions.
public class Solution {
public void flatten(TreeNode root) {
if(root != null){
Stack<TreeNode> stack = new Stack<TreeNode>();
if(root.right != null) stack.push(root.right);
if(root.left != null) stack.push(root.left);
constructure(root,stack);
}
}
public void constructure(TreeNode root, Stack<TreeNode> stack){
if(!stack.empty()){
TreeNode right = stack.pop();
root.right = right;
root.left = null;
if(right.right != null) stack.push(right.right);
if(right.left != null) stack.push(right.left);
root = root.right;
constructure(root,stack);
}
}
}
感觉效率略低,想了想是不是因为引入stack的原因导致过多的入栈出栈。Your runtime beats 28.48% of java submissions.
public class Solution {
public void flatten(TreeNode root) {
TreeNode head = root;
if(root != null){
TreeNode right = root.right;
head = flatten(root.left,head);
head = flatten(right,head);
}
}
public TreeNode flatten(TreeNode root, TreeNode pre){
if(root != null){
pre.right = root;
pre.left = null;
pre = pre.right;
TreeNode right = root.right;
pre = flatten(root.left, pre);
pre = flatten(right,pre);
}
return pre;
}
}