Given a binary tree, flatten it to a linked list in-place.
For example,
Given
Given
1
/ \
2 5
/ \ \
3 4 6
1
\
2
\
3
\
4
\
5
\
6
Hints:
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
Solution:
void preorder(TreeNode* root, vector<TreeNode *>& result)
{
result.push_back(root);
if(root->left)
preorder(root->left, result);
if(root->right)
preorder(root->right, result);
}
void flatten(TreeNode *root) {
if(!root)
return;
vector<TreeNode *> result;
preorder(root,result);
for(int i=0;i<result.size()-1;i++)
{
result[i]->left = NULL;
result[i]->right = result[i+1];
}
result[result.size()-1]->left = NULL;
result[result.size()-1]->right =NULL;
}
No comments:
Post a Comment