二叉树的镜像
题目
请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如下图所示,左图是原二叉树,而右图则是该二叉树的镜像
思路
- 先序遍历原二叉树的每个节点,如果遍历到的结点有子结点,就交换它的两个子结点。
- 递归遍历每个节点的子节点,同样,如果遍历到的子节点有子节点,就交换它的两个子节点。
当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。
/** * 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 *tmp = root->left; root->left = root->right; root->right = tmp; if (root->left != nullptr) { mirrorTree(root->left); } if (root->right != nullptr) { mirrorTree(root->right); } return root; } }; class Solution { public: //后序 void Mirror(TreeNode *root) { if(root==nullptr) return ; if(root->left==nullptr&&root->right==nullptr) return ; if(root->left) Mirror(root->left); if(root->right) Mirror(root->right); TreeNode *tmp=root->left; root->left=root->right; root->right=tmp; return ; } };