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 代码优化

  • 相关阅读:
    node.js(八 --- express)
    node.js(六 --- 文件系统模块fs)
    node.js( 五 --- 常用工具util)
    node.js(四 --- 全局对象)
    python 判断变量是否存在 防止报错
    python requests 的cookie 操作
    DDOS 攻击的防范
    python图片识别
    php常见问题-foreach和引用造成的问题。
    数据库数据类型选择
  • 原文地址:https://www.cnblogs.com/ghjnwk/p/10013746.html
Copyright © 2011-2022 走看看