题目:
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
Subscribe to see which companies asked this question
题解:
首先hint提示了类似前序遍历。所以只要将前序遍历的结果保存到一颗只有右子树,左子树为null的二叉树里就行了。
preorder函数:
先判断root是否为空,然后保存左右子树分别为left和r。再根据left和r的值重构root指向的二叉树。
代码:
class Solution {
public:
TreeNode * preorder(TreeNode *root)
{
if(!root)
return root;
TreeNode *left=root->left;
TreeNode *r=root->right;
root->left=NULL;
if(left)
{
root->right=left;
root= preorder(left);
}
if(r)
{
root->right=r;
root=preorder(r);
}
return root;
}
void flatten(TreeNode* root) {
if(!root)
return ;
preorder(root);
}
};