码迷,mamicode.com
首页 > 其他好文 > 详细

Flatten Binary Tree to Linked List Leetcode

时间:2017-01-29 10:57:33      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:cli   root   简单   函数   btn   node   http   void   pre   

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.

 

Show Company Tags
Show Tags
 
这道题在lintcode是easy,不知道leetcode为啥就是medium了。。做起来还挺简单的,不过一开始又用stack去做了。。。要先考虑递归递归啦!
要注意做题的时候,递归要首先看下函数是不是void,人家都void了我还在那儿TreeNode left = 啥呢。
还有一开始while那里忘记了,导致了原来left接的东西丢掉了。。。
public class Solution {
    public void flatten(TreeNode root) {
        if (root == null) {
            return;
        }
        flatten(root.left);
        flatten(root.right);
        if (root.left != null && root.right != null) {
            TreeNode tmp = root.right;
            root.right = root.left;
            root.left = null;
            while (root.right != null) {
                root = root.right;
            }
            root.right = tmp;
        }
        if (root.left != null) {
            root.right = root.left;
            root.left = null;
        }
    }
}

代码不够简洁,看了top solution,人家写的就很好。。。看完之后写的

public class Solution {
    private TreeNode pre = null;
    public void flatten(TreeNode root) {
        if (root == null) {
            return;
        }
        flatten(root.right);
        flatten(root.left);
        root.right = pre;
        root.left = null;
        pre = root;
    }
}

不过两种思路不太一样,我是root右边不为空的话就把右边的先存起来,把左边的接到右边,再把左边的尾部指向tmp,而第二种方法是从右边开始,pre都指向该接在上一层末尾的地方,简洁了很多。可以学习。很好奇下次再做这道题能不能直接写出这种方法。。。先存起来,以后回顾一下。。。

 
 

Flatten Binary Tree to Linked List Leetcode

标签:cli   root   简单   函数   btn   node   http   void   pre   

原文地址:http://www.cnblogs.com/aprilyang/p/6357334.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!