本题思路较为简单,直接思考递归即可完成
算法思路:
- 新建节点left为当前节点的左子树,right为当前节点的右子树;
left=pRoot->left;
right=pRoot->right; - 交换当前节点的左右子树(改变指向即可)
pRoot->left=right;
pRoot->right=left; - 递归镜像left节点和right节点
- 如果当前节点为空,不需要交换直接返回;
或者当前节点的左子树和右子树均为空,直接返回。
代码实现:
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(pRoot == NULL){
return;
}
if((pRoot->left==NULL) && (pRoot->right==NULL)){
return;
}
TreeNode* left=pRoot->left;
TreeNode* right=pRoot->right;
pRoot->left=right;
pRoot->right=left;
Mirror(left);
Mirror(right);
}
};
京公网安备 11010502036488号