Sunday, 1 September 2013

Flatten Binary Tree to Linked List

Problem Statement


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


Solution


[sourcecode language="cpp"]

class Solution {
public:
void flatten(TreeNode *root) {

TreeNode* prev = NULL;
flattenHelper(root,prev);

}
void flattenHelper(TreeNode* root,TreeNode*& prev) //Needed a pre-order traversal
{
if( root == NULL )
return;

if(prev == NULL)
prev = root;
else
{
prev->right = root;
prev->left = NULL;
prev = prev->right;
}

TreeNode* right = root->right;

flattenHelper(root->left,prev);

flattenHelper(right,prev);
}
};
[/sourcecode]

No comments:

Post a Comment