ImageVerifierCode 换一换
格式:DOC , 页数:21 ,大小:403.24KB ,
资源ID:1520478      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1520478.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(求二叉树中两结点最近的共同祖先_精品文档.doc)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

求二叉树中两结点最近的共同祖先_精品文档.doc

1、沈阳航空航天大学课程设计报告 目 录沈阳航空航天大学I学术诚信声明I1 题目介绍和功能要求41.1 题目介绍41.2 功能要求42 课程设计原理42.1 课设题目粗略分析42.2 原理图介绍52.2.1 功能模块52.2.2int main()主函数模块62.2.3Node *Create()创建二叉树模块72.2.4 Node *closest_common_ancestor(Node *r, int u, int v)计算公共结点模块83 主要函数描述93.1 创建二叉树函数93.2 计算最近共同祖先函数93.3画出二叉树函数94 调试与分析104.1 调试过程105 运行结果115.1初

2、始界面115.2创建二叉树界面115.3显示二叉树大概构成界面125.4输入两个结点计算最近共同祖先界面12参考文献14附 录(关键部分程序清单)15 6 沈阳航空航天大学课程设计报告 1 题目介绍和功能要求1.1 题目介绍1、 根据键盘输入数据创建二叉树(默认采用先序遍历创建二叉树),结点数不少于5个。2、 假设二叉树采用二叉链的结构存储,p和q为二叉树中的两个结点,编写程序计算它们最近的共同祖先并输出。1.2 功能要求1、 有提示语句可以选择是否退出程序。2、 具有判别输入结点是否为该树结点的功能。3、 p、q两个结点可选,输出显示出树的大概构成情况。2 课程设计原理2.1 课设题目粗略分

3、析根据课设题目要求,拟将程序设计成八个模块。以下是八个模块的大体分析:1、 int main()主函数模块2、 int menu()提示语句模块3、 Node *Create()创建二叉树模块4、 void dds(Node *p, Node *r)创建父结点模块5、 void Draw(Node *r)显示二叉树大概构成模块6、 Node *find(Node *p, int u)查找结点模块7、 Node *closest_common_ancestor(Node *r, int u, int v)计算公共结点模块8、 void clear(Node *r)清空标记模块2.2 原理图介绍2

4、.2.1 功能模块L C A生成模板查找模板显示模板计算模板图2.2.1 功能模块 2.2.2int main()主函数模块图2.2.2 主函数模块2.2.3Node *Create()创建二叉树模块图2.2.3创建二叉树模块2.2.4 Node *closest_common_ancestor(Node *r, int u, int v)计算公共结点模块图2.24计算最近共同结点模块3 主要函数描述3.1 创建二叉树函数调用递归,采用先序遍历创建二叉树,同时创建每个结点的父结点。根结点的父结点为NULL,左孩子和右孩子的父结点为他们的双亲,以链式存储结构存储二叉树。3.2 计算最近共同祖先函

5、数给出任意两个结点P和Q后,先从P开始向上遍历父结点,并进行标记,直至指针指向NULL。接着,从Q开始遍历其父结点,当指针遇到标记时退出循环。输出最近共同祖先,否则无共同结点。3.3画出二叉树函数用一个二维数组graph 表示图型,第一维表示图的横坐标,第二维表示图的纵坐标,然后通过cal_d()函数计算出整个二叉树的高度,cal_d()函数是一个递归函数,从根结点向下遍历,获取最大深度即为二叉树高度,然后从二叉树顶部向左右结点递归建图,在二维数组中画出主要形状后,以打印字符形式把图形输出。沈阳航空航天大学课程设计报告 4 调试与分析4.1 调试过程在调试程序是主要遇到以下几类问题:1、基本语

6、法错误解决方法:因为这属于对于C语言基础知识掌握的问题,所以查阅了相关书籍询问了老师和同学,最终改正。2、 如何创建二叉树,并创建每个结点的父结点解决方法:调用递归,采用链式存储结构先序遍历创建二叉树,空结点设为-1。根结点的父结点为NULL,左孩子和右孩子的父结点为他们的双亲。3、二叉树表示模块 解决方法:用一个二维数组表示二叉树,然后计算出整个二叉树的高度,从顶部向下递归建图 。5 运行结果5.1初始界面5.2创建二叉树界面采用先序遍历创建二叉树,空结点为-1,创建二叉树:21749385.3显示二叉树大概构成界面5.4输入两个结点计算最近共同祖先界面选择输入4 和 7两个结点,它们的最近

7、共同祖先为4。输入 1 和8两个结点,它们的最近共同祖先为2。输入 5 和 7两个结点, 它们没有最近共同祖先。参考文献1 高富平,张楚 . 电子商务法M. 北京:北京大学出版社,20022 Huang S C,Huang Y M,Shieh S MVibration and stability of a rotating shaft containing a transerse crackJ, J Sound and Vibration,1993,162(3):3874013严蔚敏,吴伟民. 数据结构(c 语言版)M.北京:清华大学教育出版社,20064戴艳等.零基础学算法M.北京:机械工业

8、出版社.201220沈阳航空航天大学课程设计报告 附 录(关键部分程序清单)#include #include #include #define maxv 1024typedef struct Node int value, mark; struct Node *lc, *rc, *pa; Node;int graphmaxvmaxv;Node *Create();void dfs(Node *p, Node *r); /*设置父结点Node *find(Node *p, int u); /*查找void clear(Node *p); /*清空标记Node *closest_common_a

9、ncestor(Node *r, int u, int v);/*计算最近共同祖先int menu();Node *Build(); /*构建二叉树void Calculate(Node *r);int Max(int a, int b); /*比较a和b谁大int cal_d(Node *r, int d); /*计算二叉树的高度void DFS(Node *r, int h, int w, int d); /*递归建图void Draw(Node *r); /*画出二叉树int main() Node *r; while(1) switch(menu() case 1: r = Build

10、(); break; case 2: Calculate(r); break; case 3: Draw(r); break; case 0: return 0; return 0;Node *Create() int n; Node *p; scanf(%d, &n); if(n=-1) return NULL; p = (Node *)malloc(sizeof(Node); p-value = n; p-lc = Create(); p-rc = Create(); return p;void dfs(Node *p, Node *r) p-pa = r; if(p-lc) dfs(p-

11、lc, p); if(p-rc) dfs(p-rc, p);Node *find(Node *p, int u) Node *t; if(p-value=u) return p; if(p-lc) t = find(p-lc, u); if(t) return t; if(p-rc) t = find(p-rc, u); if(t) return t; return 0;Node *closest_common_ancestor(Node *r, int u, int v) Node *p = find(r, u); Node *q = find(r, v); while(p) p-mark = 1; p = p-pa; while(q) if(q-mark) break; q = q-pa; return q;void clear(Node *r) r-mark = 0; if(r-lc) clear(r-lc); if(r-rc) clear(r-rc);int menu() int option; printf(n-n);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1