请完成一个函数,输入一个二叉树,该函数输出它的镜像。
(ps:也不知道咋整的,贴过来的文字就老偏,所以就自己画了一个,嘻嘻)
例如输入:
镜像输出:
因为才学过二叉树的各种遍历嘛,而且我这个脑子本来也不太能想到递归,所以我一开始看到这个题,输入是二叉树的层序遍历,然后输出就是将层序遍历的每个结点的左右结点的位置改变的一下,那我们是否可以通过将元素放入到队列以后,弹出队首的时候交换一下左右结点来解决这个问题呢?
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root == NULL) return root;
queue<TreeNode*> s;
s.push(root);
while(!s.empty())
{
TreeNode*p = s.front();
s.pop();
if(p->left != NULL){
s.push(p->left);
}
if(p->right != NULL){
s.push(p->right);
}
TreeNode*temp = p->right;
p->right = p->left;
p->left = temp;
}
return root;
}
};
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
然后就又去看了一下题解,发现大家很多用递归做的!wow!可以,一看就明白啦!
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if (root == NULL) {
return NULL;
}
TreeNode* temp = root->left;
root->left = root->right;
root->right = temp;
if (root->left != NULL) {
root->left = mirrorTree(root->left);
}
if (root->right != NULL) {
root->right = mirrorTree(root->right);
}
return root;
}
};