zoukankan      html  css  js  c++  java
  • 剑指offer-面试题.二叉树的镜像

    题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。

     二叉树节点定义如下:

    1 strcut BinaryTreeNode
    2 {
    3     int val;
    4     strcut BinaryTreeNode* m_pleft;
    5     strcut BinaryTreeNode* m_pright;
    6 }

    本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-Invert Binary Tree)一文

    实质是递归交换二叉树的左右节点。

    比如

    1         8
    2        /  
    3       6    10
    4      /    / 
    5     5  7  9  11

    1.首先查看根节点与左右子节点是否为空,若为空则无需交换

    2.先交换根节点的左右子节点。

    3.再交换交换后的左子树的左右节点和右子树的左右节点

    4.知道到达叶子节点,交换结束。

    递归函数如下:

     1 void MirrorRecursively(BinaryTreeNode *pNode)
     2 {
     3     if(pNode==NULL)
     4         return NULL;
     5 
     6     if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
     7         return NULL;
     8 
     9     struct BinaryTreeNode *TempNode;
    10     TempNode=pNode->m_pleft;
    11     pNode->m_pleft=pNode->m_pright;
    12     pNode->m_pright=TempNode;
    13 
    14     if(pNode->m_pleft)
    15     {
    16         MirrorRecursively(pNode->m_pleft);
    17     }
    18 
    19     if(pNode->m_pright)
    20     {
    21         MirrorRecursively(pNode->m_pright);
    22     }
    23 }

    说明:注意结束条件,到达叶子结点结束

    1 if(pNode->m_pleft==NULL&&pNode->m_pright==NULL)
    2  7         return NULL;

     

  • 相关阅读:
    Oracle求连续的年份
    关于Extjs MVC模式上传文件的简单方式
    后进先出 stack、 先进先出Queue
    python的文件操作
    C#的接口
    C#的访问级别
    C#的继承
    SQL查询语句 常用示例
    SQL Server数据库常用函数
    数据库建立和连接
  • 原文地址:https://www.cnblogs.com/vpoet/p/4673919.html
Copyright © 2011-2022 走看看