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

Leetcode:Flatten Binary Tree to Linked List

时间:2015-01-02 15:50:53      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

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.

Hints:

If you notice carefully in the flattened tree, each node‘s right child points to the next node of a pre-order traversal.

分析:这道题是pre-order traversal的变种,我们可以很容易的写出recursion的解法,先flatten左子树再flatten右子树,然后将左子树最右节点的right child设为右子树的根。但空间复杂度为O(logn)。代码如下:

class Solution {
public:
    void flatten(TreeNode *root) {
        if(root == NULL) return;
        
        flatten(root->left);
        flatten(root->right);
        
        if(root->left == NULL) return;
        
        TreeNode *p = root->left;
        for(; p->right; p = p->right);//find right most node in left child tree
        
        p->right = root->right;
        root->right = root->left;
        root->left = NULL;
    }
};

如果要用in place的方法,我们可以联想到Morris遍历。代码如下:

class Solution {
public:
    void flatten(TreeNode *root) {
        TreeNode *cur = root;
        
        while(cur){
            if(cur->left != NULL){
                TreeNode *prev = cur->left;
                for(; prev->right && prev->right != cur; prev = prev->right);
                if(prev->right == NULL){
                    prev->right = cur;
                    cur = cur->left;
                }else{
                    prev->right = cur->right;
                    cur->right = cur->left;
                    cur->left = NULL;
                    cur = prev->right;
                }
            }else{
                cur = cur->right;
            }
        }
    }
};

 

Leetcode:Flatten Binary Tree to Linked List

标签:

原文地址:http://www.cnblogs.com/Kai-Xing/p/4198430.html

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