牛客剑指Offer面试题27:二叉树的镜像

题目描述

操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述:
二叉树的镜像定义:源二叉树
8
/
6 10
/ \ /
5 7 9 11
镜像二叉树
8
/
10 6
/ \ /
11 9 7 5

思路

递归实现:(较为简洁)
遍历树的所有节点,如节点有子节点,则交换左右子节点.直至交换完所有非叶节点的左右子节点
循环实现:(思路与递归类似)
额外创建一个queue容器适配器(每次弹出队首元素,交换其左右子节点,然后再将二者入队,直至队列中没有元素而完毕)
注:对于顺序容器(vector, list等)使用push_back; 对于容器适配器(queue, stack等)使用push
即对于队列q:
q.push():在尾部添加元素,而非push_back()
q.pop():删除队首元素,但不返回
q.front():返回队首元素但不删除

代码

/*
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 == nullptr)
            return;
        if(pRoot->left == nullptr && pRoot->right == nullptr)
            return;
        //swap
        TreeNode* pTemp = pRoot->left;
        pRoot->left = pRoot->right;
        pRoot->right = pTemp;
        
        if(pRoot->left)
            Mirror(pRoot->left);
        if(pRoot->right)
            Mirror(pRoot->right);
        */
        
        /************循环实现************/
        //检验有效性
        if(pRoot == nullptr)
            return;
        if(pRoot->left == nullptr && pRoot->right == nullptr)
            return;
        //建立一个队列用于存放树的节点
        queue<TreeNode*> qTree;
        qTree.push(pRoot);
        //TreeNode* pOfQueueFront = nullptr;
        
        while(!qTree.empty())
        {
            //设一个指针接收每次队列头部元素
            TreeNode* pOfQueueFront = qTree.front();
            qTree.pop();
            swap(pOfQueueFront->left, pOfQueueFront->right);
            /*
            TreeNode* pTemp = pOfQueueFront->left;
            pOfQueueFront->left = pOfQueueFront->right;
            pOfQueueFront->right = pTemp;
            */
            if(pOfQueueFront->left)
                qTree.push(pOfQueueFront->left);
            if(pOfQueueFront->right)
                qTree.push(pOfQueueFront->right);
        }
    }
};
发布了65 篇原创文章 · 获赞 0 · 访问量 2058

猜你喜欢

转载自blog.csdn.net/ljmiiianng/article/details/103517614