• 四:二叉树的镜像递归非递归求解


    先序遍历树的每一个结点,若遍历到的结点有子结点。则交换它的两个子结点。

     

    1. 递归求解:

    voidMirroRecursively(BinaryTreeNode *pNode) 

        if(NULL == pNode) 

            return; 

        if(NULL == pNode->Left && NULL== pNode->Right) 

            return; 

         

        BinaryTreeNode *pTemp =pNode->Left; 

        pNode->Left = pNode->Right; 

        pNode->Right = pTemp; 

         

        if(pNode->Left) 

            MirroRecursively(pNode->Left); 

        if(pNode->Right) 

            MirroRecursively(pNode->Right); 

    2. 非递归求解(借助栈)

    借助于栈,先交换两棵子树,再求完一棵子树的镜像后在求还有一棵子树的镜像(纵向,深度优先)

    voidMirrorNonRecurively(BinaryTreeNode *pNode) 

        if(NULL == pNode) 

            return; 

     

        stack<BinaryTreeNode *>stackTreeNode; 

        stackTreeNode.push(pNode); 

     

        while(stackTreeNode.size()) 

        { 

            BinaryTreeNode *pNode =stackTreeNode.top(); 

            stackTreeNode.pop(); 

     

            if(NULL != pNode->Left || NULL !=pNode->Right) 

            { //交换

                BinaryTreeNode *pTemp =pNode->Left; 

                pNode->Left =pNode->Right; 

                pNode->Right = pTemp; 

            } 

             

            if(NULL != pNode->Left) 

               stackTreeNode.push(pNode->Left); 

     

            if(NULL != pNode->Right) 

               stackTreeNode.push(pNode->Right); 

        } 

    }

    3. 非递归求解(借助队列)

    借助于队列以用广度优先的顺序遍历一遍实现逐层镜像(横向,广度优先)

    voidMirrorNonRecurively (BinaryTreeNode * root)

     { 

        queue< BinaryTreeNode *> q; 

        q.push(root); 


        while(!q.empty())

       { 

            BinaryTreeNode * r = q.front(); 

            q.pop(); 

            if(r->pLeft != NULL)

                 q.push(r->pLeft); 

            if(r->pRight != NULL)

                 q.push(r->pRight);

     

    ////交换

            BinaryTreeNode * temp =r->pLeft; 

            r->pLeft = r->pRight; 

            r->pRight = temp; 

        } 

    }  

  • 相关阅读:
    Gitlab 自动化部署 + 局域网访问 gitlab pages
    Gitlab 跨版本升级
    Gitlab 私有化管理 npm 包
    Postman-请求加密和设置 Cookie
    menuStrip鼠标滑过自动弹出
    JAVA实用案例之文件导入导出(POI方式)
    springboot npoi 合并单元格 之后设置单元格居中
    postman测试导出Excel接口
    Application.DoEvents()的作用
    设置WINFORM窗体及程序图标
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7403664.html
Copyright © 2020-2023  润新知