博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的三种非递归遍历方式
阅读量:6993 次
发布时间:2019-06-27

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

1.先序遍历

1 void PreorderTraversal(BinTree BT) 2 { 3     BinTree T; 4     std::stack
BtStack; 5 T = BT; 6 while (T || !BtStack.empty()) 7 { 8 while (T) 9 {10 BtStack.push(T);11 printf("%c ", T->Data);12 T = T->Left;13 }14 T = BtStack.top();15 BtStack.pop();16 T = T->Right;17 18 }19 }

2.中序遍历

1 void InorderTraversal(BinTree BT) 2 { 3     BinTree T; 4     std::stack
BtStack; 5 T = BT; 6 while (T || !BtStack.empty()) 7 { 8 while (T) 9 {10 BtStack.push(T);11 T = T->Left;12 }13 T = BtStack.top();14 BtStack.pop();15 printf("%c ", T->Data);16 T = T->Right;17 18 }19 }

3.后序遍历(重难点)

在树的结构体结点中添加一个表示访问次数的数据域,visit:

1 typedef Position BinTree;    //二叉树类型2 struct TNode {3     ElementType Data;    //结点数据4     int visit;5     BinTree Left;        //指向左子树6     BinTree Right;        //指向右子树7 };

 遍历的代码程序:

1 void PostorderTraversal(BinTree BT) 2 { 3     BinTree T = BT; 4     std::stack
BtStack; 5 while (T || !BtStack.empty()) 6 { 7 while (T) 8 { 9 T->visit++;10 BtStack.push(T);11 T = T->Left;12 }13 if (!BtStack.empty())14 {15 T = BtStack.top(); //第二次或第三次访问该结点16 17 if (T->visit == 2) //当visit == 2时,该结点已经被访问了3次,所以可以被输出了18 {19 printf("%c ", T->Data);20 BtStack.pop();21 T = NULL;22 }23 else24 {25 T->visit++; //第二次访问26 T = T->Right; //即将进入第三次访问27 }28 }29 }30 }

 

转载于:https://www.cnblogs.com/hi3254014978/p/9746060.html

你可能感兴趣的文章
煲仔饭与软件测试
查看>>
perl输出信息到另一个程序
查看>>
Configure iSCSI Target on RHEL7
查看>>
写给兔小白的js教程(5)
查看>>
控制层面监管(CoPP)
查看>>
kill SNIPED session
查看>>
Memcache客户端库libmemcached介绍和部署
查看>>
读书笔记15:备忘录模式
查看>>
WCF-005:关于 WCF 基础连接已经关闭 连接被意外关闭-不是使用父类指向子类问题...
查看>>
Windows Server 2008终端服务详解系列1:终端服务概述和部署
查看>>
.NET概念:消息机制
查看>>
linux新手入门-4.vi编辑器
查看>>
powershell 修改笔记本的电源设置
查看>>
数据库优化之降龙十八掌
查看>>
安装Xcache缓存加速php及ab压力测试结果
查看>>
RHEL6.3配置Apache服务器(1) 配置默认Web站点
查看>>
在AlphaGo Zero热潮下的<AI思维+设计思维>
查看>>
HOLDLOCK is not equivalent to REPEATABLE READ
查看>>
Python元组与字典
查看>>
[Linux] 文件系统
查看>>