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
Hints:
If you notice carefully in the flattened tree, each node’s right child points to the next node of a pre-order traversal.
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void flatten(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if (root == NULL) return; stack<TreeNode*> stk; stk.push(root); TreeNode np(0); TreeNode* ptr = &np; while(!stk.empty()) { TreeNode* p = stk.top(); stk.pop(); if(p != NULL) { stk.push(p->right); stk.push(p->left); ptr->right = p; ptr = p; ptr->left = NULL; } } } };