请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树的问题,基本都靠递归来解决!
所以总体思路是:递归的交换每一个节点的左右子节点,当然后从根部向上交换。
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* mirrorTree(TreeNode* root) { //思路:对于每一个节点都取得左右两个子节点的值,存下来,然后交换。 //一定是每一个节点都交换! //递归终止条件,节点为空,返回空 if(root == nullptr) return nullptr; //反转左右子树 TreeNode* left =mirrorTree(root->left); TreeNode* right = mirrorTree(root->right); //用反转后的右子树代替左子树,反转后的左子树代替右子树 root->left = right; root->right = left; return root; } };
当然还有更简单的写法,借用swap函数,但是最好不要使用...
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* mirrorTree(TreeNode* root) { if(root == nullptr) return nullptr; mirrorTree(root->left); mirrorTree(root->right); swap(root->left,root->right); return root; } };
《从头再来》