114. Flatten Binary Tree to Linked List

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
解题思路:写了个递归,其实本质上是个迭代,把左边的扁平化,把右边的也扁平化,这个时候返回的root是left,right两个串,且返回的都是根结点,
于是把root的left置为空,把root的right置为扁平化后的left,再走到left的末尾,拼上right的部分即可。
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* helper(TreeNode* root){
        if(root==NULL)return root;
        TreeNode* left=helper(root->left);
        TreeNode* right=helper(root->right);
        root->left=NULL;
        if(left)root->right=left;
        while(left&&left->right){left=left->right;}
        if(left)left->right=right;
        return root;
        
    }
    void flatten(TreeNode* root) {
        helper(root);
    }
};

 

posted @ 2017-09-28 11:05  Tsunami_lj  阅读(142)  评论(0编辑  收藏  举报