操作给定的二叉树,将其变换为源二叉树的镜像。
//二叉树的镜像
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if (pRoot == nullptr)
return;
if (pRoot->left == nullptr&&pRoot->right == nullptr)
return;
TreeNode* newhead = pRoot; //创建新的根节点
swap(newhead->left, newhead->right); //交换左右两个节点的值
Mirror(newhead->left); //递归左子树(原右节点的子树)
Mirror(newhead->right); //递归右子树(原左节点的子树)
}
//void swap(TreeNode* left,TreeNode* right) //常规写法
{
TreeNode* tmp=left;
left=right;
right=tmp;
}
//void swap(TreeNode* left,TreeNode* right) //高效写法
{
(*left)=(*left)^(*right); //位运算,不开辟新空间
(*right)=(*left)^(*right);
(*left)=(*left)^(*right);
}
};