力扣--剑指offer--27二叉树镜像(非递归和递归)

请完成一个函数,输入一个二叉树,该函数输出它的镜像。
(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;
        
    }
};

猜你喜欢

转载自blog.csdn.net/scarificed/article/details/112998872
今日推荐