(剑指Offer)面试题19:二叉树的镜像

题目:

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

二叉树的定义如下:

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
};
输入描述:
二叉树的镜像定义:源二叉树 
    	    8
    	   /  \
    	  6   10
    	 / \  / \
    	5  7 9 11
    	镜像二叉树
            8
    	   /  \
    	  10   6
    	 / \  / \
    	11 9  7  5

思路:

观察上面两个二叉树,很容易就可以得出下面求一棵树镜像的过程:

先序遍历这棵树的每个结点,如果遍历到的结点有子结点,则交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

代码:

struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
};

void Mirror(TreeNode *pRoot){
    if(pRoot==NULL)
        return;
    if(pRoot->left==NULL && pRoot->right==NULL)
        return;
    TreeNode* tmp=pRoot->left;
    pRoot->left=pRoot->right;
    pRoot->right=tmp;

    if(pRoot->left)
        Mirror(pRoot->left);
    if(pRoot->right)
        Mirror(pRoot->right);
}

在线测试OJ:

http://www.nowcoder.com/books/coding-interviews/564f4c26aa584921bc75623e48ca3011?rp=1

AC代码:

class Solution {
public:
    void Mirror(TreeNode *pRoot){
		if(pRoot==NULL)
            return;
        if(pRoot->left==NULL && pRoot->right==NULL)
            return;
        TreeNode* tmp=pRoot->left;
        pRoot->left=pRoot->right;
        pRoot->right=tmp;
        
        if(pRoot->left)
            Mirror(pRoot->left);
        if(pRoot->right)
            Mirror(pRoot->right);
    }
};
posted @ 2015-07-15 18:17  AndyJee  阅读(339)  评论(0编辑  收藏  举报