- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、设计思想
1.?用递归算法遍历?
设计思想:主要是通过不同程序顺序,从而实现递归的顺序遍历?
前序遍历:先判断节点是否为空,如果不为空,则输出。再判断左节点是否为空,如果不为空,则递归调用,直到遍历到最左边。接着再遍历最左边的右子树,如果此时右子树不为空,则递归遍历左子树的操作,直到遍历到叶子节点。如果右子树为空,则回溯上次的递归调用,重复输出和遍历右子树的操作。?
中序遍历:?先遍历左节点是否为空,如果不为空,则递归调用,直到遍历到最左边或者叶子节点,然后输出,接着再遍历最左边的右子树,如果此时右子树不为空,则递归重复遍历左子树的操作,直到遍历到叶子节点。如果右子树为空,则回溯到上次递归调用,重复输出和遍历右子树的操作。?
后序遍历:先判断左节点是否为空,如果不为空则一直递归直到遍历到最左边,然后遍历右节点,再接着遍历到左子树的最右边,直到遍历到叶子节点。此时输出,回溯到上次递归,继续执行后面的操作,重复,直到将整个树遍历完毕。?
2.?用非递归算法遍历?
设计思想:主要是通过栈的存取,判空,从而实现树的遍历?
前序遍历:通过一个循环实现。先输出节点的数值,因为栈的特性,则需要先判断右子树是否为空,如果不为空,则将右子树压栈。然后判断左子树是否为空,如果不为空,则将左子树压栈。接着再将栈里面的子树弹出赋给给当前节点变量,重复上述操作,直到栈为空后退出循环。?
中序遍历:通过循环实现。将树一直遍历到最左端,并将中间所经过的节点保存在栈中,当遍历到最左边的时候,则弹出栈里面的子树。输出数值,将当前节点赋值为当前节点的右子树,遍历右子树,即重复上述操作,直到当前节点为空,并且栈内元素为0。?
后序遍历:通过循环和标记栈实现。将数一直遍历到最左端,并将中间的节点保存在树栈中,同时同步的添加一个标记栈。当遍历到最左边的时候,弹栈并赋值给当前栈,然后判断标记栈的数值,如果数值为0的话则代表当前树没有遍历过,遍历右子树。然后重复上面的操作,如果数值为1的话则代表此时数已经遍历过了,可以开始输出了,为了避免重复输出,将当前栈赋为空。重复循环操作,直到栈内没有元素,且当前节点为空(因为一直左的操作并没有将右子树压栈)。
二、算法流程图
图1 递归算法-先序遍历 图2 递归算法-后序遍历 图3 递归算法-中序遍历
图4 非递归算法-先序遍历 图5 非递归算法-中序遍历
图6 非递归算法-后序遍历
三、源代码
#includestdio.h
#includestdlib.h
typedef char ElemType;
//定义树结构
typedef struct tree
{
ElemType data;
struct tree * lchild;
struct tree * rchild;
unsigned int isOut; //专为后序遍历设置的,0为不需要被输出,1为需要被输出
}TreeNode, *Tree;
//定义栈结构
typedef struct stack
{
Tree * base;
Tree * top;
int stacksize;
}SqStack;
void InitStack( SqStack s );
void Push( SqStack s, Tree e );
void GetTop( SqStack s, Tree e );
void Pop( SqStack s, Tree e );
int StackEmpty( SqStack s );
void CreateTree(Tree t);
void PreOrder(Tree t);
void PreOrder1(Tree t);
void InOrder(Tree t);
void InOrder1(Tree t);
void PostOrder(Tree t);
void PostOrder1(Tree t);
int main()
{
Tree T;
printf(\n按先序序列输入结点序列,*代表空:);
CreateTree(T);
printf(\n 递归先序遍历的结果: );
PreOrder(T);
printf(\n非递归先序遍历的结果:);
PreOrder1(T);
printf(\n 递归中序遍历的结果: );
InOrder(T);
printf(\
您可能关注的文档
- 计控应知应会汇总.doc
- 解析欧体楷书结构28法.docx
- 计算机组装与维护教案2.doc
- 计算机考研数据结构试卷十三(练习题含答案).docx
- 认识圆教学方案.docx
- 议程设置笔记.doc
- 议阳信县肉牛产业的发展趋势.doc
- 让教师的精神需求有更广阔的空间.doc
- 论文(啤酒).doc
- 论中国现代文化中逐渐西化的教育现象.doc
- 2025至2031年中国用电营销管理系统行业投资前景及策略咨询研究报告.docx
- 2024年山东省烟草专卖局(公司)高校毕业生招聘拟录用人员笔试参考题库附带答案详解.pdf
- 2024年合肥高新公共资源交易有限公司招聘4人笔试参考题库附带答案详解.pdf
- 2024年南方电网产业投资集团有限责任公司校园招聘(80人+)笔试参考题库附带答案详解.pdf
- 2024年度安徽省能源集团产业研究院有限公司春季校园招聘笔试参考题库附带答案详解.pdf
- 2024年北京公交运营驾驶员招聘笔试参考题库附带答案详解.pdf
- 2024年国航股份商务委员会高校毕业生校园招聘10人笔试参考题库附带答案详解.pdf
- 2024内蒙古呼伦贝尔满洲里卫健系统事业单位公开招聘工作人员31人笔试历年参考题库典型考题及考点剖析附带答案详解 .docx
- 2024年国家电网有限公司西南分部高校毕业生招聘6人(第一批)笔试参考题库附带答案详解.pdf
- 2024年国家能源集团航运有限公司系统内公开招聘6人笔试参考题库附带答案详解.pdf
文档评论(0)