二叉树的镜像
题目描述:
操作给定的二叉树,将其变换为源二叉树的镜像。
解题思路:
跟之前的题目有些类似的地方:
看到树的题目,大多都会用递归的思想来解决
- 如果想要将整个树都做成镜像,就是要将所有结点的左右子树调换位置
- 所以,先调换第二层的结点,将左右结点互换
- 递归调用该函数,将根结点的左右子结点(也就是刚刚被调换过的)作为新的“根”结点,调换其左右子结点
- 退出的条件是遇到叶子结点,即左右子结点均为NULL的结点
代码
class Solution {
public:
void Mirror(TreeNode *pRoot) {
// 如果是空指针,则直接返回
if (pRoot == NULL)
return;
// 如果只有根结点,没有子结点,则也直接返回
if (pRoot->left == NULL && pRoot->right == NULL)
return;
// 设置一个空的指针,作为中转站
TreeNode *temp;
temp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = temp;
Mirror(pRoot->left);
Mirror(pRoot->right);
}
};
2018.10.10