Flatten Binary Tree to Linked List
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) { if(!root) return; TreeNode* newtail = new TreeNode(-1); stack<TreeNode*> stk; stk.push(root); while(!stk.empty()) { TreeNode* top = stk.top(); newtail->right = top; newtail = newtail->right; stk.pop(); if(top->right) stk.push(top->right); if(top->left) stk.push(top->left); top->left = NULL; top->right = NULL; } } };