分析题目要求,可知先序序遍历原二叉树,每次改变结点的右指针即可,需要注意的是,遍历过程中结点的左右指针会有改变,因此, 需要提前备份左右指针。
class Solution
{
public:
void flatten(TreeNode *root)
{
newHead = new TreeNode(0);
falttenHelper(root);
}
TreeNode *falttenHelper(TreeNode *root)
{
if(root==NULL)
return root;
//备份左右指针
TreeNode *left,*right;
left = root->left;
right = root->right;
root->left = NULL; //注意将左指针置为0
newHead->right = root;
newHead = root;
if(left)
falttenHelper(left);
if(right)
falttenHelper(right);
}
private:
TreeNode *newHead;
};