您的位置:首页 > 其它

写反转二叉树中遇到的一个小Bug

2015-10-14 14:44 260 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: