Problem:
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
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
Analysis:
Solutions:
C++:
void flatten(TreeNode* root)
{
if(root == NULL)
return;
if(root->left)
flatten(root->left);
if(root->right)
flatten(root->right);
if(root->left) {
TreeNode *temp_left = root->left;
root->left = NULL;
TreeNode *temp_right = root->right;
root->right = temp_left;
TreeNode *p_cur = root->right;
for(; p_cur->right != NULL; p_cur = p_cur->right) {}
p_cur->right = temp_right;
}
}
Java:
Python: