博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一种很棒的二叉树非递归后序遍历方法
阅读量:6266 次
发布时间:2019-06-22

本文共 1197 字,大约阅读时间需要 3 分钟。

( 源自:百度知道。 我承认,我对这个设计非常非常欣赏,尤其是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 if31             } //while ( !IsEmpty(S) )  32         }//else33 34         //之前没考虑到这个地方,罪过!35         if(IsEmpty(S))36             break;37     }//while( p || !IsEmpty( S ) )38 }

转载于:https://www.cnblogs.com/kevinGaoblog/archive/2012/04/03/2431224.html

你可能感兴趣的文章
【086】◀▶ 51CTO中的博客
查看>>
【C017】VBA为多文件夹内文件加表头
查看>>
虚拟机下安装CentOS无法上网的解决方式
查看>>
Servlet/Jsp实现购物车
查看>>
计蒜客 429(腾讯手机地图-pi的精确值)
查看>>
基于CC2530的ZigBee转以太网网关的设计与实现
查看>>
16款创建CSS3动画的jQuery插件
查看>>
2017-6-4 用jQuery 做大图轮播
查看>>
MySQL 8.0.12 基于Windows 安装教程(超级详细)
查看>>
linux启动引导程序配置文件
查看>>
poj 2186: Popular Cows(tarjan基础题)
查看>>
Front_end - - JavaScript
查看>>
python3+requests:接口自动化测试(二)
查看>>
12月29日-作业
查看>>
c# yyyyMMdd,dd/MM/yyyy 类型字符串转换为datetime 类型
查看>>
docker-compose.yml的使用
查看>>
容易犯错的面试题
查看>>
django框架 restful规范 CBV源码分析
查看>>
jdk 配置(已验证,但是并不是完全相同)
查看>>
《代码敲不队》第九次团队作业:Beta冲刺与验收准备
查看>>