zoukankan      html  css  js  c++  java
  • 一种很棒的二叉树非递归后序遍历方法

    ( 源自:百度知道。 我承认,我对这个设计非常非常欣赏,尤其是else while 的设计,很好的体现了后序遍历的特点 )

     1 void PostOrder( BiTree T)
     2 {
     3     InitStack( S );//初始化栈
     4     BiTree p = T; // 遍历指针、入口地址
     5     unsigned sign;//记录结点从栈中弹出的次数
     6 
     7     while( p || !IsEmpty( S ) )
     8     {
     9         if( p )
    10         {
    11             Push( p );  //第一次遇到结点T时压入其指针 
    12             Push( 1 );  //置标志为1 
    13             p = p->lchild;
    14         }
    15         else // p为空指针,循环出栈
    16         {
    17             while ( !IsEmpty(S) )   //后序遍历中,当访问完一个结点时,则以该结点为根的树都访问完,所以下一步应该继续出栈,
    18             {
    19                 sign = Pop( );
    20                 p = ( BiTree )Pop( );
    21                 
    22                 if( sign == 2 ) //表示T的左右子树都已走过 
    23                     Visit( p ); 
    24                 else if( sign == 1 )//表示仅走过T的左子树 ,右子树必定是第一次遇到,
    25                 {
    26                     Push( p );
    27                     Push( 2 );
    28                     p = p->rchild;
    29                     break;
    30                 }//else if
    31             } //while ( !IsEmpty(S) )  
    32         }//else
    33 
    34         //之前没考虑到这个地方,罪过!
    35         if(IsEmpty(S))
    36             break;
    37     }//while( p || !IsEmpty( S ) )
    38 }
  • 相关阅读:
    环境安装和工程搭建
    计算机发展史
    计算机硬件介绍--输入设备和输出设备
    计算机硬件介绍--内存
    bit和byte
    计算机硬件介绍--中央处理器--CPU
    取投料成本
    获取BOM标准用量
    取投料数量
    怎么更改當前的USERENV('LANG')返回值 oracle
  • 原文地址:https://www.cnblogs.com/kevinGaoblog/p/2431224.html
Copyright © 2011-2022 走看看