递归:
class Solution {
public:
void Mirror(TreeNode* root) {
if(!root) return ;
swap(root);
if(root->left)
Mirror(root->left);
if(root->right)
Mirror(root->right);
}
void swap(TreeNode * root)
{
TreeNode * tmp = root->left ;
root->left = root->right;
root->right = tmp;
}
};
非递归(层次遍历):
class Solution {
public:
void Mirror(TreeNode* root) {
if(!root) return;
deque<TreeNode *> dq;
dq.push_back(root);
while(!dq.empty())
{
TreeNode * node = dq.front();
dq.pop_front();
swap(node);
if(node->right)
{
dq.push_back(node->right);
}
if(node->left)
{
dq.push_back(node->left);
}
}
}
void swap(TreeNode * root)
{
TreeNode * tmp = root->left ;
root->left = root->right;
root->right = tmp;
}
};
非递归(先序遍历):
class Solution {
public:
void Mirror(TreeNode* root) {
if(!root) return;
stack<TreeNode *> dq;
dq.push(root);
while(!dq.empty())
{
TreeNode * node = dq.top();
dq.pop();
swap(node);
if(node->right)
{
dq.push(node->right);
}
if(node->left)
{
dq.push(node->left);
}
}
}
void swap(TreeNode * root)
{
TreeNode * tmp = root->left ;
root->left = root->right;
root->right = tmp;
}
};