• 6 二叉树的镜像


    0 引言

    问题:请完成一个函数,输入一个二叉树,该函数输出它的镜像. 二叉树的结点定义如下:

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

    1 抽象问题具体化

    举例1:

    举例2:

    举例3:输入为空,返回为空 

    2 具体问题抽象分析

    语言+伪代码描述算法流程

    (1)第一层遍历:前序递归遍历给定二叉树

    1)对头结点输入有效性进行判断

    2)完成前序递归遍历操作,访问头结点,递归访问左子树,递归访问右子树

    3)访问头结点时,实现左右子树交换

    伪代码如下.

    Void Mirror(TreeNode* pRoot){
      // 防御式编程,首先对头结点进行判断
      if(pRoot == NULL)
      return;
     // 前序遍历访问头结点
     访问pRoot,交换其左右结点,ExchangeLeftAndRightChild(pRoot); 
     Mirror(pRoot->left);
     Mirror(pRoot->right);
    }

    (2)实现void ExchangeLeftAndRightChild(TreeNode* pRoot);

    void ExchangeLeftAndRightChild(TreeNode* pRoot){
      TreeNode* temp;
      temp = pRoot->left;
      pRoot->left = pRoot->right;
      pRoot->right = temp; }

    3 demo

       void ExchangeLeftAndRightChild(TreeNode* pRoot){        
            TreeNode* temp;
            temp = pRoot->left;
            pRoot->left = pRoot->right;
            pRoot->right = temp;
        }
        void Mirror(TreeNode *pRoot) {
             // 防御式编程,首先对头结点进行判断
             if(pRoot == NULL)
                return;
             // 前序遍历访问头结点
             ExchangeLeftAndRightChild(pRoot); 
             Mirror(pRoot->left);
             Mirror(pRoot->right);
        }

    4 代码优化

  • 相关阅读:
    java类实现 指定网站信息采集
    通过jxl.jar 读取、导出excel的小例子
    SQL使用CASE WHEN THEN
    动态查询的实现
    Oracle 查询存储过程 做横向报表
    文本信息 生成二维码 例子
    将对象转换为指定的Map
    eclipse 插件大全
    让人看了舒服的清爽颜色搭配CSS
    spring 定时任务 实现
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10013746.html
Copyright © 2020-2023  润新知