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.
/** * Definition for a binary tree node. * struct TreeNode {* int val; * TreeNode *left; * TreeNode *right; * TreeNode (int x): Val (x), left (NULL) , right (NULL) {}}; */class Solution {public: void flatten (treenode* root) { if (root = NULL) return; treenode* Rightnode = root->right;//Save Right child treenode* tmp = root->left; while (TMP && tmp->right) { tmp = tmp->right; } Find the right child direct precursor if (TMP)//If the left child is not empty { tmp->right = rightnode;//Let the direct precursor point to the saved right child Root->right = root->left;//right pointer to left child Root->left = null;//left hand pointer to empty flatten (root->right);//treat left child the same way } Flatten (Rightnode);//The same treatment for the right child };
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Leetcode: Flatten Binary Tree to Linked List