题目要求返回给定二叉树的镜像二叉树, 观察镜像二叉树与原二叉树的特点可知: 镜像二叉树的左子树是原二叉树的右子树,因此可以采用后序递归遍历。先翻转左子树上所有结点的左、右孩子结点,再翻转右子树左、右孩子,最后翻转根结点的左右孩子结点即可。
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return TreeNode类
*/
TreeNode* Mirror(TreeNode* pRoot) {
// 后续遍历
if(!pRoot) // 空树直接返回nullptr
return nullptr;
TreeNode *l = nullptr, *r = nullptr; // l表示左子树翻转后的根节点, r表示右子树翻转后的根结点
l = Mirror(pRoot->left); // 翻转左子树
r = Mirror(pRoot->right); // 翻转右子树
auto tmp = pRoot->left; // 翻转根结点的左、右子树
pRoot->left = pRoot->right;
pRoot->right = tmp;
return pRoot; // 返回翻转后的根结点
}
};

京公网安备 11010502036488号