TreeNode* invertTree(TreeNode* root) {
auto ret=invert(root);
return ret;
}
TreeNode* invert(TreeNode* r)
{
if(r==NULL) return NULL;
swap(invert(r->left),invert(r->right));
return r;
}
void swap(TreeNode* &l,TreeNode* &r)
{
auto t=l;
l=r;
r=t;
}
恩很好,这段代码有一处傻逼错误,你能一眼看出来么?(反转二叉树提交了5次)
对,我引用了一个临时返回值..
返回的是一个临时的值,然而swap接口却是引用,真正要用的时候,已经没有了。
返回值是临时的!
void swap(TreeNode* &l,TreeNode* &r)
swap(invert(r->left),invert(r->right));
段代码写得一点也不好….
这里贴一段更好的代码
TreeNode* invertTree(TreeNode* root) {
if (root==NULL) return NULL;
auto left=root->left;
auto right=root->right;
root->left=invertTree(right);
root->right=invertTree(left);
return root;
}