- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树前序遍历的递归算法演示程序
班级 姓名
======== 实习报告二 “二叉树前序遍历的非递归算法”演示程序 ============
、程序的功能和特点
程序通过键盘输入数据建立一个二叉树,通过递归算法与非递归算法两种方式用前序遍历法输出二叉树。
功能包括:
前序遍历方式建立二叉树
前序遍历的递归算法输出二叉树
3. 前序遍历的非递归算法(以栈完成)输出二叉树
(二)、程序的算法设计
“二叉树前序遍历的非递归”算法:
1.【逻辑结构与存储结构设计】
程序中的二叉树的逻辑结构为树状结构;
存储结构为链式存储
2.【基本操作设计】
程序的主要操作有:
判断栈是否为空
元素进栈(插入到栈顶,即将新节点插入到头部)
元素出栈(删除头结点)
以root为根建立二叉树(输入按前序遍历方式输入字符串)等
3.【算法设计】
前序遍历方式建立二叉树
public BinTreeNode preOrderCreate ( BinTreeNode p,String s)
{
得到输入字符串第i位的字符item;
如果item不是参照值(此程序为” ∧”)
{
1、生成根结点;
2、把根结点的左指针作为新的根结点指针,递归调用自身生成左子 树;
3、 把根结点的右指针作为新的根结点指针,递归调用自身生成右 子树;
}
否则,封闭叶子节点。
}
前序遍历的递归算法输出二叉树
public void preOrderTraverse (BinTreeNode p) {
如果根节点不为空{
1、输出根节点的数据域
2、把根结点的左指针作为新的根结点指针,递归调用自身 输出左子树
3、把根结点的右指针作为新的根结点指针,递归调用自身 输出右子树
}
}
前序遍历的非递归算法输出二叉树
void PreOrder(BinTreeNode p) {
若根节点的不为空(循环访问){
输出根节点的值
如果右子树不为空{
右子树的地址进栈
}
如果左子树不为空{
当前指针指向左子树
}
否则若栈空则打断循环(右子树地址出栈即当前指针指向右 子树)
}
}
【高级语言代码】
前序遍历方式建立二叉树
int is=0; //串s的下标,成员变量,避免回溯。
public BinTreeNode preOrderCreate ( BinTreeNode p,String s) {
char item=s.charAt(is++); //得到串s的第is个字符
if ( item != RefValue ){ //读入的不是参照值
p=new BinTreeNode(item);
//递归生成左子树
p.leftChild=preOrderCreate(p.leftChild,s);
//递归生成右子树
p.rightChild=preOrderCreate(p.rightChild,s);
//实参是空二叉树,得到返回的子二叉树
}
else //读入的是参照数
p=null; //封闭叶子结点
return p; //返回二叉树p
}
前序遍历的递归算法输出二叉树
public void preOrderTraverse (BinTreeNode p){
if ( p != null ){ //输出根结点数据域
System.out.print( +p.GetData());
//递归输出p的左子树
preOrderTraverse ( p.leftChild );
//递归输出p的右子树
preOrderTraverse (p.rightChild );
}
}
前序遍历的非递归算法输出二叉树
void PreOrder(BinTreeNode p) {
//定义栈(栈的数据类型是二叉树结点指针)
cLinkStack S=new cLinkStack(); //空栈
//从当前结点开始遍历访问
while ( p!=null) {
//访问根结点
System.out.print( +p.GetData());
//预留右孩子地址在栈中
if ( p.rightChild != null )
S.Push ( p.rightChild );
//若有左孩子,当前指针指向左孩子
if ( p.leftChild != null )
p = p.leftChild;
else if((p=S.Pop())==null
您可能关注的文档
- 中原城市群城乡统筹建设的基本思路与途径_郭小燕.pdf
- 中国世界空白底图!2016级高一补课.doc
- 中国企业总会计师的典范_刘玉廷.pdf
- 中国信息产业与经济增长关系实证分析.pdf
- 中国农业大学2017年《电路原理》考试大纲_中国农大考研网.pdf
- 中国人民大学2017年翻译硕士考研初试复试流程.pdf
- 中国区域地理背诵知识点列表.docx
- 中国地质大学2017年地空学院《勘探地球物理基础》硕士入学考试大纲.pdf
- 中国地质大学2017年外国语学院《英语语言文学基础》硕士入学考试大纲.pdf
- 中国地质大学2017年地空学院《应用地球物理基础》硕士入学考试大纲.pdf
- 山东省威海乳山市银滩高级中学2022-2023学年高三9月月考物理试题.docx
- 山东省日照第一中学2020届高三上学期期中考试英语试题 Word版含答案.doc
- 山东省实验中学2023届高三第二次诊断考试语文试题.docx
- 山东省威海乳山市银滩高级中学2023届高三上学期9月月考日语试题 word版无答案.docx
- 山东省实验中学2023届高三第二次诊断考试地理试题.docx
- 山西省运城市2022-2023学年高三年级入学新生教学质量监测考试地理试题.docx
- 山东省实验中学2023届高三第二次诊断考试历史试题.docx
- 山东省实验中学2019届高三第二次诊断性考试数学试题(文).doc
- 山东省济南市历城第二中学2020届高三上学期期中考试化学试题 Word版含答案.doc
- 山东省威海乳山市银滩高级中学2022-2023学年高三9月月考政治试题.docx
文档评论(0)