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
struct Node { int val; Node(int v) { val = v; left = right = NULL; } Node *left; Node *right; }; Node* visit(Node *root) { if (root == NULL) { return NULL; } Node *tempRight = root->right; Node *leftNode = root; if (root->left != NULL) { leftNode = visit(root->left); root->left->left = root; root->right = root->left; } leftNode->right = tempRight; Node *rightNode = root; if (tempRight != NULL) { rightNode = visit(tempRight); } if (tempRight != NULL) { tempRight->left = leftNode; } return rightNode; }