二叉树的递归和非递归遍历.doc
HYPERLINK /heyonggang/p/3366804.html 二叉树的遍历(递归和非递归)
?
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是 递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中, 前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。
一.前序遍历
?? 前序遍历按照“根结点-左孩子-右孩子”的顺序进行访问。
? 1.递归实现
void?pre_order(BTree?*root)????
{????
?????if(root?!=?NULL)//必不可少的条件,递归的出口????
?????{????
????????printf(%2c,root-key);????
????????pre_order(root-lchild);????
????????pre_order(root-rchild);????
??
?????}????
}????
?2.非递归实现
?? ?根据前序遍历访问的顺序,优先访问根结点,然后再分别访问左孩子和右孩子。即对于任一结点,其可看做是根结点,因此可以直接访问,访问完之后,若其左孩子不为空,按相同规则访问它的左子树;当访问其左子树时,再访问它的右子树。因此其处理过程如下:
???? 对于任一结点P:
???? 1)访问结点P,并将结点P入栈;
?????2)判断结点P的左孩子是否为空,若为空,则取栈顶结点并进行出栈操作,并将栈顶结点的右孩子置为当前的结点P,循环至1);若不为空,则将P的左孩子置为当前的结点P;
???? 3)直到P为NULL并且栈为空,则遍历结束。
//非递归前序遍历???
void?pre_order(BTree?*root)???????
{??
????stackBTree*?s;??
????BTree?*p?=?root;??
????while?(p?!=?NULL?||?!s.empty())?{??
????????while(p?!=?NULL)?{??
????????????coutp-data?;??
????????????s.push(p);??
????????????p?=?p-lchild;??
????????}??
????????if?(!s.empty())?{??
????????????p?=?s.top();??
????????????s.pop();??
????????????p?=?p-rchild;??
????????}??
????}??
}??
二.中序遍历
??? 中序遍历按照“左孩子-根结点-右孩子”的顺序进行访问。
??? 1.递归实现
void?in_order(BTree*?root)????
{????
????//必不可少的条件,递归的出口???
?????if(root?!=?NULL)???
?????{????
????????in_order(root-lchild);????
????????printf(%2c,root-data);????
????????in_order(root-rchild);??????
?????}????
}???
?
?2.非递归实现
????根据中序遍历的顺序,对于任一结点,优先访问其左孩子,而左孩子结点又可以看做一根结点,然后继续访问其左孩子结点,直到遇到左孩子结点为空的结点才进行访问,然后按相同的规则访问其右子树。因此其处理过程如下:
???对于任一结点P,
? 1)若其左孩子不为空,则将P入栈并将P的左孩子置为当前的P,然后对当前结点P再进行相同的处理;
??2)若其左孩子为空,则取栈顶元素并进行出栈操作,访问该栈顶结点,然后将当前的P置为栈顶结点的右孩子;
? 3)直到P为NULL并且栈为空则遍历结束
//非递归中序遍历???
void?in_order(BTree?*root)???????
{??
????stackBTree*?s;??
????BTree?*p?=?root;??
????while?(p?!=?NULL?||?!s.empty())?{??
????????while(p?!=?NULL)?{??????????????
????????????s.push(p);??
????????????p?=?p-lchild;??
????????}??
????????if?(!s.empty())?{??
????????????p?=?s.top();??
???
您可能关注的文档
- 桃园县101年度.doc
- 桃园县国民电脑应用竞赛活动实施计画.doc
- 案例函数(一).doc
- 乐教乐学平台应用使用说明.doc
- 桑名市防犯灯设置补助金概要.doc
- 乐高积木的几何原理.doc
- 九生期中试题(答案).doc
- 也谈几何图形入门的概念教学.doc.doc
- 楼地层的构造组成、类型及设计要求-4楼地层.doc
- 书眉模态逻辑讲义-中山大学逻辑与认知研究所.doc
- 2026年及未来5年市场数据中国维生素D类行业市场调查及投资前景风险预测报告.docx
- 宠物商业计划书范文.docx
- 2026年及未来5年市场数据中国往复式给料机行业市场发展现状及投资前景预测报告.docx
- 2026年及未来5年市场数据中国微晶玻璃行业深度研究与投资风险报告.docx
- 2026年及未来5年市场数据中国微藻油市场深度评估与投资前景预测报告.docx
- 2026年及未来5年市场数据中国味精行业市场需求预测与投资战略规划分析报告().docx
- 河北省危险化学品建设项目安全监督管理细则(2025年发布).docx
- 2026年及未来5年市场数据中国维生素B2市场全景调查与未来发展趋势报告(定制版).docx
- 2026年及未来5年市场数据中国微波检测仪行业市场发展现状及投资前景预测报告.docx
- 2026年及未来5年市场数据中国往复式给料机行业市场发展深度调查及投资战略可行性报告.docx
最近下载
- 2025年新疆维吾尔自治区中考英语真题含答案.pdf VIP
- 第31课 中国特色社会主义新时代和全面建成小康社会(二)(课件)-【中职专用】《中国历史》.pptx VIP
- 八大特殊作业危险告知牌全套.docx VIP
- 二年级下国学计划及教案 .pdf VIP
- 南昌大学《物理化学》2018-2019学年期末试卷.pdf VIP
- (统编2026新教材)二年级道法下册第1课《身心健康很重要》课件.pptx
- 涉诈风险账户审查表51.pdf VIP
- 第31课 中国特色社会主义新时代和全面建成小康社会(二)(配套教案)-【中职专用】《中国历史》.docx VIP
- 深度解析(2026)《GB 16423-2020金属非金属矿山安全规程》.pptx VIP
- 新人教版数学五年级下册全册课本练习题精编可编辑可打印.doc VIP
原创力文档

文档评论(0)