[leetcode_114]Flatten Binary Tree to Linked List

将一个二叉树扁平化。
所有扁平化就是:

1
2
3
4
5
         1
        / \
       2   5
      / \   \
     3   4   6

变为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
1  
\  
2  
\  
3  
\  
4  
\  
5  
\  
6

Each node’s right child points to the next node of a pre-order traversal.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
    TreeNode * flattenStep(TreeNode *root) {
        if(root->left == NULL && root->right == NULL)
            return root;
        TreeNode * tmp = NULL;
        if(root->right != NULL)
            tmp = flattenStep(root->right);
        if(root->left != NULL)
            root->right = flattenStep(root->left);
        else
            root->right = NULL;
        root->left = NULL;
        if(tmp != NULL) {
            TreeNode * tmpright = root;
            while(tmpright->right != NULL)
                tmpright = tmpright->right;
            tmpright->right = tmp;
        }
        return root;
    }
    void flatten(TreeNode *root) {
        if(root == NULL)return;
        root = flattenStep(root);
    }
};
Licensed under CC BY-NC-SA 4.0