zoukankan      html  css  js  c++  java
  • 二叉树(11)----求二叉树的镜像,递归和非递归方式

    1、二叉树定义:

    typedef struct BTreeNodeElement_t_ {
        void *data;
    } BTreeNodeElement_t;
    
    
    typedef struct BTreeNode_t_ {
        BTreeNodeElement_t     *m_pElemt;
        struct BTreeNode_t_    *m_pLeft;
        struct BTreeNode_t_    *m_pRight;
    } BTreeNode_t;


    2、求二叉树镜像

    比如:

                       A                                                                    A

            B                C                    ====>                    C             B

        D     E                                                                             E       D


    (1)递归方式

    假设pRoot为NULL,则为空树,返回。

    假设pRoot不为NULL,交换pRoot左右结点,然后分别求左右子树的镜像。


    void  BTreeMirror( BTreeNode_t *pRoot){
        if( pRoot == NULL )
            return ;
    
        BTreeNode_t *pTemp = pRoot->m_pLeft;
        pRoot->m_pLeft = pRoot->m_pRight;
        pRoot->m_pLeft = pTemp;
    
        BTreeMirror( pRoot->m_pLeft);
        BTreeMirror( pRoot->m_pRight);
        return;
    }



    (2)非递归方式

    步骤描写叙述:借助队列


    首先,将根节点pRoot入队。

    第一步:当队列未空时,获取当前层次的节点总数,即当前队列的长度;运行第二步;

    第二步:依照当前层的节点总数,出队进行遍历节点。在遍历时,交换左右节点。假设左右节点存在,则入队;当遍历完当前层全部节点时。遍历下一层,运行第一步。

    void   BTreeMirror( BTreeNode_t *pRoot){
        if( pRoot == NULL )
            return NULL;
    
        queue <BTreeNode_t *> que;
        que.push(pRoot);
        int curLevelNodesTotal = 0;
        while( !que.empty()){
            curLevelNodesTotal = que.size();
            int cnt = 0;
            while( cnt < curLevelNodesTotal ){
                ++cnt;
                pRoot = que.front();
                que.pop();
                BTreeNode_t *pTemp = pRoot->m_pLeft:
                pRoot->m_pLeft = pRoot->m_pRight;
                pRoot->m_pRight = pTemp;
    
                if( pRoot->m_pLeft != NULL)
                    que.push( pRoot->m_pLeft);
                if( pRoot->m_pRight != NULL )
                    que.push( pRoot->m_pRight);
            }
        }
    
        return;
    }


  • 相关阅读:
    【Mybatis】【10】foreach 批量操作
    【Java】【30】数据基本类型的转换
    【Mybatis】【9】ResultMap支持继承
    【记录】【4】各种工具
    【cmd】【4】ping IP或者域名,看是否能连通
    【cmd】【3】查看jdk安装路径
    【JS】【29】解决浏览器自动填充密码输入框的问题
    QQ登入(2)获取用户信息
    QQ登入(1)-有客户端直接授权,没客户端web授权
    百度定位
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7147323.html
Copyright © 2011-2022 走看看