先上笨蛋解法,提价的时候,我发现一个问题,这道题的检验是检验原来的root地址,如果你后面把root地址改了,那他检验的还是原二叉树。
class Solution {
public:
void rconnect(TreeNode *&node,TreeNode *pmove)
{
if(pmove==nullptr)
return;
node->right=new TreeNode(pmove->val);
node->left=nullptr;
node=node->right;
rconnect(node,pmove->left);
rconnect(node,pmove->right);
}
void flatten(TreeNode* root) {
if(root==nullptr)
return;
TreeNode *head=new TreeNode();
TreeNode *newroot=head;
rconnect(head,root);
newroot=newroot->right->right;
root->right=newroot;
root->left=nullptr;
}
};
下面这种递归应该是最简单的,但是应该归类成什么遍历呢?
class Solution {
public:
TreeNode *newroot=nullptr;
void flatten(TreeNode* root) {
if(root==nullptr)
return;
flatten(root->right);
flatten(root->left);
root->right=newroot;
root->left=nullptr;
newroot=root;
}
};