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
其实这个顺序就是前序遍历的顺序,做孩子都为NULL,右孩子为下一个先序遍历的节点。
void flatten(TreeNode* root) {
if(!root) return;
stack<TreeNode*> q;//前序遍历不能用队列啊!
q.push(root);
vector<TreeNode*> res;
while(q.size()>0){
TreeNode* p=q.top();
q.pop();
res.push_back(p);
if(p->right) q.push(p->right);
if(p->left) q.push(p->left);
}
res.push_back(NULL);
for(int i=0;i<res.size()-1;i++){
res[i]->left=res[res.size()-1];
res[i]->right=res[i+1];
}
}