题目地址
解题思路
本题有两种方法实现:
- 递归法
- 栈或队列实现
个人认为:栈实现比较符合认知,也很容易理解。而用递归去实现容易绕不出来。
代码实现(C++)
法一:递归法
/**
* 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 root;
}
TreeNode* temp=root->left;
root->left=mirrorTree(root->right);
root->right=mirrorTree(temp);
return root;
}
};
法二:栈或队列实现
/**
* 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)
{
stack<TreeNode*> st;
if(root==nullptr)
{
return root;
}
st.push(root);
while(!st.empty())
{
TreeNode* node=st.top();
st.pop();
if(node->left!=nullptr)
{
st.push(node->left);
}
if(node->right!=nullptr)
{
st.push(node->right);
}
TreeNode* temp=node->left;
node->left=node->right;
node->right=temp;
}
return root;
}
};