题目要求返回给定二叉树的镜像二叉树, 观察镜像二叉树与原二叉树的特点可知: 镜像二叉树的左子树是原二叉树的右子树,因此可以采用后序递归遍历。先翻转左子树上所有结点的左、右孩子结点,再翻转右子树左、右孩子,最后翻转根结点的左右孩子结点即可。
/** * 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; // 返回翻转后的根结点 } };