操作给定的二叉树,将其变换为源二叉树的镜像的多种方法多种题解(已通过)

题目及分析

操作给定的二叉树,将其变换为源二叉树的镜像。

分析:就是将二叉树的所有左右子树节点交换过来就可以了

思路(2种)

这里思路可以有以下两种

  1. 在原有的树上直接将所有左右子树节点交换
  2. 重新遍历生成一颗树,这棵树刚好是原来的镜像

代码(2个)

1. 在原有的树上直接将所有左右子树节点交换

递归的方法很是简便,但是需要注意的是在有些地方会ac不了,毕竟很耗内存

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void Mirror(TreeNode *pRoot) {
        if(pRoot == NULL){
            return ;
        }
        //交换左右子树节点    
        TreeNode *t = pRoot->left;
        pRoot->left = pRoot->right;
        pRoot->right = t;
        //递归
        Mirror(pRoot->left);
        Mirror(pRoot->right);
    }
};

2. 重新遍历生成一颗树,这棵树刚好是原来的镜像

这里采用层次遍历的方法:代码里又十分详细的注释

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void Mirror(TreeNode *pRoot) {
//         如果为空树
        if (!pRoot) return;
        
//         创建队列,并将原始树的所有元素推入队列
        queue<TreeNode*> qtree;
        qtree.push(pRoot);
        
//         层次遍历树,每次拿出队列的第一个节点
        while(!qtree.empty()){
 //         算出树中的节点数
            int len = qtree.size();
            while(len--){
//          取出队列的第一个节点
                TreeNode *node = qtree.front();
                qtree.pop();
                
//          将其左右子树推入队列
                if(node->left){
                    qtree.push(node->left);
                }
                if(node->right){
                    qtree.push(node->right);
                }
            
//             交换树的左子树右子树节点
                TreeNode *t = node->left;
                node->left = node->right;
                node->right = t;
            }
           
        }     
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值