Leetcode-114. Flatten Binary Tree to Linked List

来源:互联网 发布:Js写table 编辑:程序博客网 时间:2024/06/06 14:09

前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发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

click to show hints.

这个题目比较醉,一开始没看题,以为是广度优先压缩,结果是先序遍历的压缩。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;    }}






0 0
原创粉丝点击