镜像顾名思义,镜像对称。关于这题的思路,这篇文章我觉得总结的很好,
剑指Offer-20-二叉树的镜像
即:第一步交换根节点的左右子树,之后交换左右子树自己的左右子树。
方法1
这个很容易想到递归,即刚开始,需要交换根节点8的两个子节点6,10;接着,我们对左右子树,再次进行交换操作。
代码如下:
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot == nullptr)return;
TreeNode *temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right =temp;
Mirror(pRoot->left);
Mirror(pRoot->right);
}
};
也可用swap函数
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot)
{
swap(pRoot->left,pRoot->right);
Mirror(pRoot->left);
Mirror(pRoot->right);
}
}
};
另外,在本例中,纠正了一下自己对-> 和. 的理解。如果把上面代码中的箭头换成 .
则编译不通过。参考博客:
C++中箭头“->”和“.”的区别
总结如下:
后来牛客网稍微改动了函数原型。但具体思路仍同上,代码如下:
TreeNode* Mirror(TreeNode* pRoot) {
if(pRoot==nullptr) return nullptr;
TreeNode* temp = pRoot->left;
pRoot->left = Mirror(pRoot->right);
pRoot->right = Mirror(temp);
return pRoot;
}