劍指offer_編程題_二叉樹的鏡像

  • 題目
    操作給定的二叉樹,將其變換爲源二叉樹的鏡像。
    二叉樹的鏡像定義:源二叉樹 
        	    8
        	   /  \
        	  6   10
        	 / \  / \
        	5  7  9 11
        	鏡像二叉樹
        	    8
        	   /  \
        	  10   6
        	 / \  / \
        	11 9  7  5
    
  1. 對二叉樹進行遍歷,並交換左右孩子結點
    遞歸
    /*
    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)
        	{
        		TreeNode *temp;
        		temp = pRoot->left;
        		pRoot->left = pRoot->right;
        		pRoot->right = temp;
        		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 != NULL)
     	   {
     	       std::queue<TreeNode*> q;
     		   q.push(pRoot);
     		   while(!q.empty())
     		   {
     			   TreeNode *k = q.front();
     			   TreeNode *temp = k->left;
     			   k->left = k->right;
     			   k->right = temp;
     			   if(k->left!=NULL)
     				   q.push(k->left);
     			   if(k->right!=NULL)
     				   q.push(k->right);
     			   q.pop();
     		   }
     	   }
        }
    };
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章