# 114. Flatten Binary Tree to Linked List

![](https://4272748102-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LekNH5IywF8mjBxFcnu%2F-MlL9o-P2U2JKMEuS09k%2F-MlLFREoeWoCKogRw6Bi%2Fimage.png?alt=media\&token=aa27af05-438d-4442-8495-05329ec63e8e)

![](https://4272748102-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LekNH5IywF8mjBxFcnu%2F-MlL9o-P2U2JKMEuS09k%2F-MlLFUjm7klJLAjV0phb%2Fimage.png?alt=media\&token=84112ae2-77f4-4112-8ca4-59a59404785a)

time: O(n)

space: O(n), which is occupied by the recursion stack

```java
class Solution {
    public void flatten(TreeNode root) {
        flattenImpl(root);
    }
    private TreeNode flattenImpl(TreeNode root) {
        if (root == null) {
            return null;
        }
        
        TreeNode leftLast = flattenImpl(root.left);
        TreeNode rightLast = flattenImpl(root.right);
        
        if (leftLast != null) {
            leftLast.right = root.right;
            root.right = root.left;
            root.left = null;
        }
        if (rightLast != null) {
            return rightLast;
        } else if (leftLast != null) {
            return leftLast;
        }
        return root;
    }
}

/*
root left right

2 - 3 - 4
leftlast = 3
rightlast = 4


return rightLast // 4

*/
```

space O(1), next time...
