zoukankan      html  css  js  c++  java
  • 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 代码优化

  • 相关阅读:
    PHP_Code_challenge(代码审计)
    超全局变量$GLOBALS
    upload-labs(文件上传)
    CTF bugku 论剑场 web20
    多次Printf()是否使用用同一栈帧的参数?
    (转载于度盘)小迪安全渗透-学习讲义
    SQL数据库操作练习(2)
    .htaccess绕过
    PHP序列化思考(9.14已修改)
    SQL数据库操作练习(1)
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10013746.html
Copyright © 2011-2022 走看看