Medium
Given the root
of a binary tree, flatten the tree into a “linked list”:
TreeNode
class where the right
child pointer points to the next node in the list and the left
child pointer is always null
.Example 1:
Input: root = [1,2,5,3,4,null,6]
Output: [1,null,2,null,3,null,4,null,5,null,6]
Example 2:
Input: root = []
Output: []
Example 3:
Input: root = [0]
Output: [0]
Constraints:
[0, 2000]
.-100 <= Node.val <= 100
Follow up: Can you flatten the tree in-place (with O(1)
extra space)?
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* flattenAux(struct TreeNode* root) {
if (root == NULL) {
return NULL;
}
if ((root->right == NULL) && (root->left == NULL)) {
return root;
}
struct TreeNode *pR = root->right;
struct TreeNode *pll = NULL;
struct TreeNode *plr = NULL;
if (root->left != NULL) {
root->right = root->left;
pll = flattenAux(root->left);
root->left = NULL;
}
if (pR != NULL) {
plr = flattenAux(pR);
}
if (pll != NULL) {
pll->right = pR;
}
if (plr != NULL) {
return plr;
}
return pll;
}
void flatten(struct TreeNode* root) {
flattenAux(root);
}