zoukankan      html  css  js  c++  java
  • (剑指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);
        }
    };
  • 相关阅读:
    二人pk答题小程序
    题解【CF911F】Tree Destruction
    题解【洛谷P5765】[CQOI2005]珠宝
    WC2021 游记
    生产环境财务BUG的排查与总结
    生产环境一个订单状态错误的排查与反思
    《HeadFirstServletAndJsp》笔记一
    Java泛型简介二
    Java泛型简介一
    在Windows环境下与Linux环境下快速计算文件Hash
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4649164.html
Copyright © 2011-2022 走看看