求二叉树中两结点最近的共同祖先(共21页).doc
《求二叉树中两结点最近的共同祖先(共21页).doc》由会员分享,可在线阅读,更多相关《求二叉树中两结点最近的共同祖先(共21页).doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上目 录专心-专注-专业 1 题目介绍和功能要求1.1 题目介绍1、 根据键盘输入数据创建二叉树(默认采用先序遍历创建二叉树),结点数不少于5个。2、 假设二叉树采用二叉链的结构存储,p和q为二叉树中的两个结点,编写程序计算它们最近的共同祖先并输出。1.2 功能要求1、 有提示语句可以选择是否退出程序。2、 具有判别输入结点是否为该树结点的功能。3、 p、q两个结点可选,输出显示出树的大概构成情况。2 课程设计原理2.1 课设题目粗略分析根据课设题目要求,拟将程序设计成八个模块。以下是八个模块的大体分析:1、 int main()主函数模块2、 int menu()提示
2、语句模块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.2.1 功能模块L C A生成模板查找模板显示模板计算模板图2.2.1 功能模块 2.2.2int main()主函数模块图2.2.2
3、 主函数模块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 计算最近共同祖先函数给出任意两个结点P和Q后,先从P开始向上遍历父结点,并进行标记,直至指针指向NULL。接着,从Q开始遍历其父结点,当指针遇到标记时退出
4、循环。输出最近共同祖先,否则无共同结点。3.3画出二叉树函数用一个二维数组graph 表示图型,第一维表示图的横坐标,第二维表示图的纵坐标,然后通过cal_d()函数计算出整个二叉树的高度,cal_d()函数是一个递归函数,从根结点向下遍历,获取最大深度即为二叉树高度,然后从二叉树顶部向左右结点递归建图,在二维数组中画出主要形状后,以打印字符形式把图形输出。4 调试与分析4.1 调试过程在调试程序是主要遇到以下几类问题:1、基本语法错误解决方法:因为这属于对于C语言基础知识掌握的问题,所以查阅了相关书籍询问了老师和同学,最终改正。2、 如何创建二叉树,并创建每个结点的父结点解决方法:调用递归,
5、采用链式存储结构先序遍历创建二叉树,空结点设为-1。根结点的父结点为NULL,左孩子和右孩子的父结点为他们的双亲。3、二叉树表示模块 解决方法:用一个二维数组表示二叉树,然后计算出整个二叉树的高度,从顶部向下递归建图 。5 运行结果5.1初始界面5.2创建二叉树界面采用先序遍历创建二叉树,空结点为-1,创建二叉树:21749385.3显示二叉树大概构成界面5.4输入两个结点计算最近共同祖先界面选择输入4 和 7两个结点,它们的最近共同祖先为4。输入 1 和8两个结点,它们的最近共同祖先为2。输入 5 和 7两个结点, 它们没有最近共同祖先。参考文献1 高富平,张楚 . 电子商务法M. 北京:北
6、京大学出版社,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.北京:机械工业出版社.2012附 录(关键部分程序清单)#include #include #include #define maxv 1024typedef struct Nod
7、e 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_ancestor(Node *r, int u, int v);/*计算最近共同祖先int menu();Node *Build(); /*构建二叉树void Calculate(Node *r);in
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 树中两 结点 最近 共同 祖先 21
限制150内