题目描述

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

输入描述:

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

递归
/*
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 *a=pRoot->left;
     pRoot->left= pRoot->right;
     pRoot->right=a;
     Mirror(pRoot->left);
     Mirror(pRoot->right);
    }
};

  

栈的非递归

/*
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 ;
     stack<TreeNode *> st;
     TreeNode *p=NULL;
     st.push(pRoot);
     while(st.size()) {
         p=st.top();
         st.pop();
         swap(p->left,p->right);
         if(p->left) st.push(p->left);
         if(p->right) st.push(p->right);
     }
        
        
     
    }
};

  

队列非递归
/*
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;
        queue<TreeNode *> q;
        TreeNode *p=NULL;
        q.push(pRoot);
        while(q.size()) {
            p=q.front();
            q.pop();
            swap(p->left,p->right);
            if(p->left)	q.push(p->left);
            if(p->right) q.push(p->right);
        }
     
    }
};

  



posted on 2017-08-07 10:43  王小东大将军  阅读(112)  评论(0编辑  收藏  举报