题目描述 二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。
解题思路
转自 https://www.cnblogs.com/edisonchou/p/4774626.html
- 先序遍历原二叉树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。
- 递归遍历每个节点的子节点,同样,如果遍历到的子节点有子节点,就交换它的两个子节点。
-
当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。下图展示了求二叉树的镜像的过程:
代码
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(!pRoot || (!pRoot->left && !pRoot->right)) return;
TreeNode *temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp;
if(pRoot->left){
Mirror(pRoot->left);
}
if(pRoot->right){
Mirror(pRoot->right);
}
}
};
二刷
class Solution {
public:
void Mirror(TreeNode *pRoot) {
if(!pRoot) return ;
TreeNode *temp = pRoot->right;
pRoot->right = pRoot->left;
pRoot->left = temp;
Mirror(pRoot->right);
Mirror(pRoot->left);
}
};