Flatten Binary Tree to Linked List Leetcode

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都指向该接在上一层末尾的地方,简洁了很多。可以学习。很好奇下次再做这道题能不能直接写出这种方法。。。先存起来,以后回顾一下。。。

 
 

转载于:https://www.cnblogs.com/aprilyang/p/6357334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值