递归:
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;
}
};
本文介绍了二叉树翻转的三种实现方式:递归、非递归的层次遍历和非递归的先序遍历。每种方法都详细展示了如何通过交换节点的左右子树来完成整个二叉树的翻转。
2万+

被折叠的 条评论
为什么被折叠?



