请完成一个函数,输入一个二叉树,该函数输出它的镜像。
输入:
4
/ \
2 7
/ \ / \
1 3 6 9
输出:
4
/ \
7 2
/ \ / \
9 6 3 1
思路一:递归
递归返回条件:如果root为空,返回空
交换左右子树
把root的左子树放到mirrorTree中镜像一下
把root的右子树放到mirrorTree中镜像一下
返回根节点root
先交换还是先镜像都可以,对顺序没有要求
TreeNode* mirrorTree(TreeNode* root) {
if(root == NULL) return NULL;
swap(root->left,root->right);
if(root->left) mirrorTree(root->left);
if(root->right) mirrorTree(root->right);
return root;
}
思路二:迭代
不难发现,递归求解的本质其实就是前序遍历
因此可以用栈解决
TreeNode* mirrorTree(TreeNode* root) {
if(root == NULL) return NULL;
stack<TreeNode*> stk;
stk.push(root);
while(!stk.empty()) {
TreeNode* node = stk.top();
stk.pop();
swap(node->left,node->right);
if(node->right) stk.push(node->right);
if(node->left) stk.push(node->left);
}
return root;
}