【剑指Offer-27】二叉树的镜像
问题
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
示例
解答1:递归
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (!root) return nullptr;
// ------ 前序操作
swap(root->left, root->right);
// ------
mirrorTree(root->left);
mirrorTree(root->right);
return root;
}
};
重点思路
本题只需要在遍历的过程中不断地交换左右节点即可。这道题可以用前序和后序的遍历方式。中序不行,因为中序是“左根右”的顺序,从根位置交换左右节点后,下一个遍历的是原来的左节点。
解答2:迭代
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
stack<TreeNode*> s;
if (root) s.push(root);
while (!s.empty()) {
TreeNode* cur = s.top(); s.pop();
// ------ 前序操作
swap(cur->left, cur->right);
// ------
if (cur->right) s.push(cur->right);
if (cur->left) s.push(cur->left);
}
return root;
}
};