1. 程式人生 > >劍指offer——18.二叉樹的映象

劍指offer——18.二叉樹的映象

題目描述:

操作給定的二叉樹,將其變換為源二叉樹的映象。

輸入描述:

二叉樹的映象定義:源二叉樹 
    	    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());
            }
    }  
};