zoukankan      html  css  js  c++  java
  • 四:二叉树的镜像递归非递归求解

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

     

    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; 

        } 

    }  

  • 相关阅读:
    Apache CXF实战之四 构建RESTful Web Service
    使用CXF开发RESTFul服务
    Java多线程中的异常处理
    Checked异常和Runtime异常体系
    hql 语法与详细解释<转>
    hibernate实现有两种配置,xml配置与注释配置。<转>
    Hibernate配置详细解释
    重构(Refactoring)技巧读书笔记(General Refactoring Tips)
    Hibernate(1)——数据访问层的架构模式<转>
    关于layer.photos即照片显示的问题。
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/7403664.html
Copyright © 2011-2022 走看看