求二叉树根到给定节点地路径设计报告材料.docx
- 文档编号:27508170
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:12
- 大小:123.36KB
求二叉树根到给定节点地路径设计报告材料.docx
《求二叉树根到给定节点地路径设计报告材料.docx》由会员分享,可在线阅读,更多相关《求二叉树根到给定节点地路径设计报告材料.docx(12页珍藏版)》请在冰豆网上搜索。
求二叉树根到给定节点地路径设计报告材料
题目:
求二叉树根到给定节点的路径
摘要:
本程序设计题要求出二叉树的根节点到给定节点的路径,我们利用二叉树的双亲存储表示法建立二叉树,然后在树的叶子节点中找到给定的节点,利用双亲指针找出该节点所有祖先并入栈,直至根节点,然后再让栈中元素依次出栈,得到二叉树到该节点的路径,使程序得以实现。
关键字:
二叉树双亲指针栈路径
1、题目要求------------------------------------------------------------------4
2、设计思想------------------------------------------------------------------4
3、系统完成功能及框图---------------------------------------------------4
4、界面设计------------------------------------------------------------------6
5、核心算法及说明---------------------------------------------------------8
6、结论------------------------------------------------------------------------10
7、后记------------------------------------------------------------------------11
8、附录------------------------------------------------------------------------11
第一章题目要求:
在采用顺序表存储结构存储的二叉树上,以bt指向根接点,p指向任一给定的接点,编程实现求出从根接点到给定接点之间的路径。
第二章设计思想:
首先输入要查找的二叉树的各个节点和双亲指针,采用双亲表示法存储结构创建一棵二叉树,然后通过path()函数在树中找到要查找的节点,再利用树的双亲指针逐层向上找到该节点的所有祖先,让其进栈,最后依次输出栈中的节点数据即为二叉树根到给定节点的路径。
第三章系统完成功能及框图:
3.1系统完成功能:
系统功能包括创建二叉树和求二叉树根结点到给定结点的路径两部分。
3.2功能框图:
3.2.1整体框图:
3.2.2求路径算法的流程图:
第四章界面设计:
图1程序运行开始界面
图2创建二叉树的界面
图3输出顺序存储的二叉树的界面
图4求到给定节点路径的界面
第五章核心算法及说明:
我们利用二叉树的双亲存储表示法建立二叉树,然后在树的叶子节点中找到给定的节点,利用双亲指针找出该节点所有祖先并入栈,直至根节点,然后再让栈中元素依次出栈,得到二叉树到该节点的路径
5.1定义数据类型
structPTNode//定义树的节点类型
{
chardata;//节点数据
intparent;//双亲指针
};
typedefstruct{//定义树结构
structPTNodenodes[100];//定义存放节点的数组
intr,n;//根的位置与节点数
}PTree;
5.2创建二叉树
voidCreatPTree(PTree*PT)//采用双亲表存储构建树
{
cout<<"请输入二叉树根节点的位置r和节点数n:
\n";
cout<<"根节点的位置r=";
cin>>PT->r;
cout<<"二叉树的节点数n=";
cin>>PT->n;
chard;
intp;
cout<<"//***请输入节点和双亲指针\n";
for(inti=0;i
{
cin>>d>>p;
PT->nodes[i].data=d;
PT->nodes[i].parent=p;
}
cout<<"以下就是节点数是"< for(i=0;i { cout<nodes[i].data<<""< } } 5.3求根节点到给定节点的路径 voidpath(PTree*PT,chare)//求根节点到给定节点的路径 { ints[100],top=-1;//建栈 for(inti=0;i if(PT->nodes[i].data==e) break; while(i! =PT->r) { s[++top]=i; i=PT->nodes[i].parent; } s[++top]=i; cout<<"根节点到"< "; for(;top>0;--top)//从根节点到给定结点依次输出 cout< cout< }//path 第六章结论 6.1、运行结果: 6.2算法分析: 经过不断的上机调试,源程序运行正确,实现了用双亲表示存储的方法创建二叉树并通过path()函数实现了求根节点到给定节点路径的功能并且实现算法要求的功能,程序中二叉树有n个节点,因此创建树所用时间为O(n),实现根节点到指定节点的路径问题时所用时间为O(n*n)所以算法的时间复杂度为O(n*n). 第七章后记: 1、通过本设计实验将数据结构中的二叉树和栈的知识复习到,并且能够自己设计一些东西,学会了在设计实验过程时的基本步骤。 基本上能够有条理的解决这些问题。 2、在试验中遇到了很多的问题,都是以前没有发现的,这些问题设计的方面很多,有以前的C++基础的,也有最近学习的数据结构的知识。 通过实验的设计,让我发现了自己的不足。 自己在学习知识上面的漏洞。 自己在细节方面的考虑还不够全面,很多细节都是通过调试才发现的,希望通过弥补这些发现的漏洞,提高自己的专业知识水平。 第八章附录: #include #include #include #defineMAXSIZE100; structPTNode//定义树节点类型 { chardata;//节点数据 intparent;//双亲指针 }; typedefstruct{//定义树结构 structPTNodenodes[100];//定义存放节点的数组 intr,n;//根的位置与节点数 }PTree; voidCreatPTree(PTree*PT)//采用双亲表示存储法构建树 { cout<<"请输入二叉树根节点的位置r和节点数n: \n"; cout<<"根节点的位置r="; cin>>PT->r; cout<<"二叉树的节点数n="; cin>>PT->n; chard; intp; cout<<"//***请输入节点和双亲指针\n"; cout<<"//***格式如下: \n"; cout<<"//***A-1"< cout<<"//***B0"< cout<<"//***C0"< cout<<"//***D1"< cout<<"//***......"< cout<<"开始输入"< for(inti=0;i { cin>>d>>p; PT->nodes[i].data=d; PT->nodes[i].parent=p; } cout<<"以下就是节点数是"< for(i=0;i cout<nodes[i].data<<""< } } voidpath(PTree*PT,chare)//求根节点到给定节点的路径 { ints[20],top=-1;//建栈 for(inti=0;i if(PT->nodes[i].data==e) break; while(i! =PT->r) { s[++top]=i; i=PT->nodes[i].parent; } s[++top]=i; cout<<"根节点到"< "; for(;top>0;--top)//从根节点到给定结点依次输出 cout< cout< }//path voidmain(){ cout<<"**********************求二叉树根到给定节点的路径**********************"< cout<<"*******先创建一棵二叉树,再求这棵树的一个叶子节点到根的路径*******"< cout<<"***************************************************************"< PTree*PT1=newPTree; CreatPTree(PT1); chare; cout<<"输入要查找的结点: "; cin>>e; path(PT1,e); } 参考文献: 1.《数据结构》(C语言版)作者: 严蔚敏、吴伟民 清华大学出版社 2.《C++语言基础教程》(第二版)作者: 徐孝凯 清华大学出版社 3.《数据结构题集》(C语言版)作者: 严蔚敏、吴伟民、米宁 清华大学出版社 4.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 树根 给定 节点 路径 设计 报告 材料