剑指offer——18.二叉树的镜像

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/N1neDing/article/details/82938264

题目描述:

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

输入描述:

二叉树的镜像定义:源二叉树 
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11
    	镜像二叉树
    	    8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9 7  5

解题思路1:

使用递归求解,每次将一个节点的左右子树调换,然后对剩余的子节点进行同样的操作。

参考源码1:

class Solution
{
public:
    void Mirror(TreeNode *pRoot)
    {  
            if(pRoot == NULL) return;
            TreeNode* tmp = pRoot->right;
            pRoot->right = pRoot->left;
            pRoot->left = tmp;
            Mirror(pRoot->left);
            Mirror(pRoot->right);
    }  
};

解题思路2:

不使用递归,使用循环,用一个数据结构每次将节点插入其中,然后对首部节点进行操作

参考源码2:

class Solution
{
public:
    void Mirror(TreeNode *pRoot)
    {  
            if(pRoot == NULL) return;
            vector<TreeNode*> vec;
            vec.push_back(pRoot);
            while(vec.size())
            {
                    if(vec.front()->left != NULL)
                    {
                            vec.push_back(vec.front()->left);
                    }
                    if(vec.front()->right != NULL)
                    {
                            vec.push_back(vec.front()->right);
                    }
                    TreeNode* tmp = vec.front()->left;
                    vec.front()->left = vec.front()->right;
                    vec.front()->right = tmp;
                    vec.erase(vec.begin());
            }
    }  
};

猜你喜欢

转载自blog.csdn.net/N1neDing/article/details/82938264