二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
例如输入:
示例 1:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
限制:
0 <= 节点个数 <= 1000
解题思路
解法一(递归法)
方法很简单,直接看代码:
代码如下:
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root==NULL) return NULL;
swap(root->left,root->right);
//递归镜像左子树
mirrorTree(root->left);
//递归镜像右子树
mirrorTree(root->right);
return root;
}
};
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:9 MB, 在所有 C++ 提交中击败了75.09%的用户
解法二(栈实现)
算法实现大致过程:从根节点开始入栈,然后取出栈顶元素,并将他们的左右子树都依次压入栈,同时交换左右子树。直到栈为空时结束。
代码如下:
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
stack<TreeNode*> s;
s.push(root);
while(!s.empty())
{
TreeNode* node=s.top();
s.pop();
//这里continue是因为防止两个null之间swap会报错
if(node==NULL)
continue;
s.push(node->left);
s.push(node->right);
swap(node->left,node->right);
}
return root;
}
};
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:9.2 MB, 在所有 C++ 提交中击败了24.38%的用户