数据结构课程设计--按层次遍历二叉树

合集下载

二叉树的遍历和应用

二叉树的遍历和应用

内蒙古科技大学本科生课程设计说明书题目:数据结构课程设计——二叉树的遍历和应用学生姓名:学号:专业:班级:指导教师:2013年5月29日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录内蒙古科技大学课程设计任务书..............................................................错误!未定义书签。

目录 (II)第一章需求分析 (3)1.1课程设计目的 (3)1.2任务概述 (3)1.3课程设计内容 (3)第二章概要设计 (5)2.1设计思想 (5)2.2二叉树的遍历 (5)2.3运行界面设计 (6)第三章详细设计 (7)3.1二叉树的生成 (7)3.2二叉树的先序遍历 (7)3.3 二叉树的中序遍历 (8)3.4二叉树的后续遍历 (8)3.5主程序的设计 (8)第四章测试分析 (11)4.1二叉树的建立 (11)4.2二叉树的先序、中序、后序遍历 (11)第五章课程设计总结 (12)附录:程序代码 (13)致谢 ···········································································································错误!未定义书签。

二叉树和二叉树的遍历教案打印

二叉树和二叉树的遍历教案打印

遍历二叉树课程教案
深度为k ,且有2k -1个结点的二叉树。

二、遍历二叉树
遍历二叉树:指按一定的规律对二叉树的每个结点,访问且仅访问
一次的处理过程。

遍历对线性结构是容易解决的。

而二叉树是非线性的,因而需要寻
找一种规律,使二叉树上的结点能排列在一个线性队列上,从而便于遍
历。

遍历的次序:假如以L 、D 、R 分别表示遍历左子树、遍历根结点和
遍历右子树,规定先左后右,则只有前三种情况,分别规定为:
DLR ——先(根)序遍历,
LDR ——中(根)序遍历,
LRD ——后(根)序遍历。

例题:
图-3 图-4
图-2 满二叉树
1
2 3 4 5 6 7 深 度:K=3 节点数:n=23-1
叶子数:N=23-1。

二叉树的遍历教案

二叉树的遍历教案

课题二叉树的遍历学习目标:1、知识与技能掌握二叉树三种遍历的遍历原则和方法2、过程与方法通过体验、分析、讲授和实践探究,学会遍历二叉树3情感态度与价值观(!)通过遍历学习,培养学生细致严谨的思维习惯(2)促进学生对算法学习的热情,学习在平时生活中建模思想。

学情分析:本学期高一学生刚刚学习完数学选修科目3《算法》,对数据流程有比较深刻的认知,具备探究树理论的基础。

重难点:重点:二叉树特征;难点:二叉树的遍历规则的实际使用。

教学过程:活动一:一起游戏——汉诺塔游戏介绍:汉诺塔是一款WP7平台上源于印度一个古老传说的益智类游戏。

传说上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。

上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。

并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

游戏玩法:游戏里有三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。

玩家需要做的是把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。

并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

活动二:二叉树1 特点:一棵由一个结点和两棵互不相交的分别称作根的左子树和右子树所组成的非空树,左右子树又同样都是二叉树。

遍历是对二叉树树的一种最基本的运算,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。

2 几种遍历(1)前序遍历:中序遍历后序遍历(2)遍历规则步骤第一第二第三名称前序遍历访问根结点前序遍历左子树前序遍历右子树中序遍历中序遍历左子树访问根结点中序遍历右子树后序遍历后序遍历左子树后序遍历右子树风味根结点备注二叉树非空活动三:完成图5二叉树的前序遍历abcdeghi图5活动四:分组讨论完成右图二叉树的中序遍历和后序遍历中序CBDAEGF后序:CDBGFEA活动五:讨论探究完成图5二叉树的中序遍历和后序遍历中序:CBAFEGDHI后序:CBFGEIHDA活动五:知识拓展:1假设前序遍历是adbgcefh,中序遍历是dgbaechf,请你推演出该二叉树;2假设后序遍历是gbdehfca,中序遍历是dgbaechf,请你推演出该二叉树的前序遍历节奏把控:前序遍历是先访问根节点,然后再访问子树的,而中序遍历则先访问左子树再访问根节点,那么把前序的a 取出来,然后查找a 在中序遍历中的位置就得到dgb a echf 这样我们就知道dgb 是左子树echf 是右子树,因为数量要吻合所以前序中相应的dbg 是左子树cefh 是右子树。

二叉树遍历-教学设计

二叉树遍历-教学设计

二叉树遍历--教学设计所属学科:数据库专业:计算机(相关学科)课程:数据结构适用对象:大二上学期本课所讲解的内容为二叉树遍历的三种基本方法和一种新颖的方法,所属学科为数据结构与算法。

数据结构与算法是计算机专业的重要基础课,也是非计算机专业学生在大学生计算机等级考试中的课程之一,是一门集技术性、理论性和实践性于一体的课程。

故本微课结合该课程特点,合理分配知识结构及节奏,并融充分合多媒体技术,算法描述清晰,展现内容丰富,适合课堂教学,也便于自学,可作为高等院校计算机专业和其他相关专业的参考资料,也可供参加全国普通高校非计算机专业大学生计算机等级考试(CCT)的学生及计算机爱好者学习和参考。

教学思想:本课内容没有太过繁琐的语言,而是采用与多媒体充分融合的方式,并采用部分flash动画讲解遍历方法,生动、简洁、丰富地展现教学内容,教学思路清晰。

提高了教学效率和教学质量,使学生在单位时间内能够学到更多的知识,更大幅度地提高学生各方面的能力,从而使学生获得良好的发展。

课程设计思路:遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。

由于访问结点所做的操作依赖于具体的应用问题,所以我们对所讲解的问题分别举了一个容易和较难的例子,并配上一个难度适中的启发式的习题思考,在讲解过程中让学生充分理解,并学会运用不同的遍历方式解决问题,最后加上顺口溜式的总结,使学生对知识点更加融会贯通。

教学特色:1、教学思路清晰。

对于遍历的讲解是按照遍历概念、实例、动画演示、算法和总结的步骤进行的,效果较好。

2、在视频讲解中,语言生动而富于亲和力,表达多样,激发学生兴趣。

通过改变教学内容的展现形式,更具独到趣味,激发学生内外动力来实现。

3、在课件中,我们的幻灯片布局简洁,动画紧随讲解节奏的推进而随时跟进,生动形象,而又清晰明了地将所讲的知识点呈现出来,充分运用了现代多媒体教学方式的优点。

4、在PPT中我们插入了Flash动画,让遍历方法更加清晰明了,让学习者更容易理解与掌握。

数据结构-二叉树的存储结构和遍历

数据结构-二叉树的存储结构和遍历

return(p); }
建立二叉树
以字符串的形式“根左子树右子树”定义 一棵二叉树
1)空树 2)只含一个根 结点的二叉树 A 3)
B C
A
以空白字符“ ”表示
以字符串“A ”表示
D
以下列字符串表示 AB C D
建立二叉树 A B C C
T
A ^ B ^ C^ ^ D^
D
建立二叉树
Status CreateBiTree(BiTree &T) {
1 if (!T) return;
2 Inorder(T->lchild, visit); // 遍历左子树 3 visit(T->data); } // 访问结点 4 Inorder(T->rchild, visit); // 遍历右子树
后序(根)遍历
若二叉树为空树,则空操

左 子树
右 子树
作;否则, (1)后序遍历左子树; (2)后序遍历右子树; (3)访问根结点。
统计二叉树中结点的个数
遍历访问了每个结点一次且仅一次
设置一个全局变量count=0
将visit改为:count++
统计二叉树中结点的个数
void PreOrder (BiTree T){ if (! T ) return; count++; Preorder( T->lchild); Preorder( T->rchild); } void Preorder (BiTree T,void( *visit)(TElemType& e)) { // 先序遍历二叉树 1 if (!T) return; 2 visit(T->data); // 访问结点 3 Preorder(T->lchild, visit); // 遍历左子树 4 Preorder(T->rchild, visit);// 遍历右子树 }

数据结构入门-树的遍历以及二叉树的创建

数据结构入门-树的遍历以及二叉树的创建

数据结构⼊门-树的遍历以及⼆叉树的创建树定义:1. 有且只有⼀个称为根的节点2. 有若⼲个互不相交的⼦树,这些⼦树本⾝也是⼀个树通俗的讲:1. 树是有结点和边组成,2. 每个结点只有⼀个⽗结点,但可以有多个⼦节点3. 但有⼀个节点例外,该节点没有⽗结点,称为根节点⼀、专业术语结点、⽗结点、⼦结点、根结点深度:从根节点到最底层结点的层数称为深度,根节点第⼀层叶⼦结点:没有⼦结点的结点⾮终端节点:实际上是⾮叶⼦结点度:⼦结点的个数成为度⼆、树的分类⼀般树:任意⼀个结点的⼦结点的个数都不受限制⼆叉树:任意⼀个结点的⼦结点个数最多是两个,且⼦结点的位置不可更改⼆叉数分类:1. ⼀般⼆叉数2. 满⼆叉树:在不增加树层数的前提下,⽆法再多添加⼀个结点的⼆叉树3. 完全⼆叉树:如果只是删除了满⼆叉树最底层最右边的连续若⼲个结点,这样形成的⼆叉树就是完全⼆叉树森林:n个互不相交的树的集合三、树的存储⼆叉树存储连续存储(完全⼆叉树)优点:查找某个结点的⽗结点和⼦结点(也包括判断有没有⼦结点)速度很快缺点:耗⽤内存空间过⼤链式存储⼀般树存储1. 双亲表⽰法:求⽗结点⽅便2. 孩⼦表⽰法:求⼦结点⽅便3. 双亲孩⼦表⽰法:求⽗结点和⼦结点都很⽅便4. ⼆叉树表⽰法:把⼀个⼀般树转化成⼀个⼆叉树来存储,具体转换⽅法:设法保证任意⼀个结点的左指针域指向它的第⼀个孩⼦,右指针域指向它的兄弟,只要能满⾜此条件,就可以把⼀个⼀般树转化为⼆叉树⼀个普通树转换成的⼆叉树⼀定没有右⼦树森林的存储先把森林转化为⼆叉树,再存储⼆叉树四、树的遍历先序遍历:根左右先访问根结点,再先序访问左⼦树,再先序访问右⼦树中序遍历:左根右中序遍历左⼦树,再访问根结点,再中序遍历右⼦树后续遍历:左右根后续遍历左⼦树,后续遍历右⼦树,再访问根节点五、已知两种遍历求原始⼆叉树给定了⼆叉树的任何⼀种遍历序列,都⽆法唯⼀确定相应的⼆叉树,但是如果知道了⼆叉树的中序遍历序列和任意的另⼀种遍历序列,就可以唯⼀地确定⼆叉树已知先序和中序求后序先序:ABCDEFGH中序:BDCEAFHG求后序:这个⾃⼰画个图体会⼀下就可以了,⾮常简单,这⾥简单记录⼀下1. ⾸先根据先序确定根,上⾯的A就是根2. 中序确定左右,A左边就是左树(BDCE),A右边就是右树(FHG)3. 再根据先序,A左下⾯就是B,然后根据中序,B左边没有,右边是DCE4. 再根据先序,B右下是C,根据中序,c左下边是D,右下边是E,所以整个左树就确定了5. 右树,根据先序,A右下是F,然后根据中序,F的左下没有,右下是HG,6. 根据先序,F右下为G,然后根据中序,H在G的左边,所以G的左下边是H再来⼀个例⼦,和上⾯的思路是⼀样的,这⾥就不详细的写了先序:ABDGHCEFI中序:GDHBAECIF已知中序和后序求先序中序:BDCEAFHG后序:DECBHGFA这个和上⾯的思路是⼀样的,只不过是反过来找,后序找根,中序找左右树简单应⽤树是数据库中数据组织⼀种重要形式操作系统⼦⽗进程的关系本⾝就是⼀棵树⾯向对象语⾔中类的继承关系哈夫曼树六、⼆叉树的创建#include <stdio.h>#include <stdlib.h>typedef struct Node{char data;struct Node * lchild;struct Node * rchild;}BTNode;/*⼆叉树建⽴*/void BuildBT(BTNode ** tree){char ch;scanf("%c" , &ch); // 输⼊数据if(ch == '#') // 如果这个节点的数据是#说明这个结点为空*tree = NULL;else{*tree = (BTNode*)malloc(sizeof(BTNode));//申请⼀个结点的内存 (*tree)->data = ch; // 将数据写⼊到结点⾥⾯BuildBT(&(*tree)->lchild); // 递归建⽴左⼦树BuildBT(&(*tree)->rchild); // 递归建⽴右⼦树}}/*⼆叉树销毁*/void DestroyBT(BTNode *tree) // 传⼊根结点{if(tree != NULL){DestroyBT(tree->lchild);DestroyBT(tree->rchild);free(tree); // 释放内存空间}}/*⼆叉树的先序遍历*/void Preorder(BTNode * node){if(node == NULL)return;else{printf("%c ",node->data );Preorder(node->lchild);Preorder(node->rchild);}}/*⼆叉树的中序遍历*/void Inorder(BTNode * node){if(node == NULL)return;else{Inorder(node->lchild);printf("%c ",node->data );Inorder(node->rchild);}}/*⼆叉树的后序遍历*/void Postorder(BTNode * node){if(node == NULL)return;else{Postorder(node->lchild);Postorder(node->rchild);printf("%c ",node->data );}}/*⼆叉树的⾼度树的⾼度 = max(左⼦树⾼度,右⼦树⾼度) +1*/int getHeight(BTNode *node){int Height = 0;if (node == NULL)return 0;else{int L_height = getHeight(node->lchild);int R_height = getHeight(node->rchild);Height = L_height >= R_height ? L_height +1 : R_height +1; }return Height;}int main(int argc, char const *argv[]){BTNode * BTree; // 定义⼀个⼆叉树printf("请输⼊⼀颗⼆叉树先序序列以#表⽰空结点:");BuildBT(&BTree);printf("先序序列:");Preorder(BTree);printf("\n中序序列:");Inorder(BTree);printf("\n后序序列:");Postorder(BTree);printf("\n树的⾼度为:%d" , getHeight(BTree));return 0;}// ABC##DE##F##G##。

数据结构_二叉树的遍历_课程设计

数据结构_二叉树的遍历_课程设计

8
if(bt!=NULL)/*二叉树 bt 非空*/ { inorder(bt->lchild);/*中序遍历 bt 的左子树*/ printf("%c",bt->data);/*访问结点 bt*/ inorder(bt->rchild);/*中序遍历 bt 的右子树*/ } } void postorder(bitree *bt)/*后序序遍历二叉树*/ { if(bt!=NULL) { postorder(bt->lchild); postorder(bt->rchild); printf("%c",bt->data); } }
3.2.2 二叉树的中序递归遍历算法
void inorder(bitree *bt)/*中序序遍历二叉树*/ { if(bt!=NULL)/*二叉树 bt 非空*/ { inorder(bt->lchild);/*中序遍历 bt 的左子树*/ printf("%c",bt->data);/*访问结点 bt*/ inorder(bt->rchild);/*中序遍历 bt 的右子树*/ } }
图 1 “菜单”界面
图2
创建二叉树
5
图 3 二叉树的先序遍历
图4
二叉树的中序输出
6
图 5 二叉树的后序输出
五:实验总结 虽然做的过程中出现很多错误。但是最后还是一一纠正了,并在其中发现了自 身的不足,补学补差。最后终于完成了。
六:源程序附录
#include<stdio.h> #include<stdlib.h> typedef char datatype; typedef struct node { datatype data;/*数据元素*/ struct node *lchild,*rchild;/*指向左,右孩子*/ }bitree; bitree *root;/*二叉树结点类型定义*/ bitree *creatbitree(bitree *root)/*创建二叉树*/ { char ch;

利用队列实现二叉树的层次遍历

利用队列实现二叉树的层次遍历

实验三利用队列实现二叉树的层次遍历实验目的(1)掌握利用二叉树的递归结构性质建立二叉链表(2)掌握循环队列的基本算法(3)掌握二叉树的遍历算法实验环境(1)Windows 2000,或WindowsXP(简体中文)(2)Visual C++ 6.0,或C++ Builder 6.0操作系统环境和编程环境(集成开发环境)任选以上所列之一。

实验内容设计一个利用队列实现二叉树层次遍历的程序。

假设二叉树结点的元素数据类型为字符型,二叉树以二叉链表存储。

利用二叉树的递归结构性质,通过读取键盘输入的如图所示二叉树的先序序列,建立其二叉链表。

实现步骤:以C++ Builder环境为例,实现步骤如下:1.新建一个Win32 Console Application程序项目。

2.在代码编辑窗口编写程序代码,含义如注释说明:#include <iostream.h>#include <conio.h>#define maxlen 10 // 定义循环队列的数组大小typedefstruct node{ char data;struct node *lp, *rp;}bt_node; // 二叉链表结点类型typedefstruct qnode{ bt_node *data[maxlen];int front, rear;}queue; // 队列数据类型void init_queue(queue &q) // 初始化队列函数{ q.front=0;q.rear=0;}int empty_queue(const queue &q) // 判队空函数{ if(q.front==q.rear) return 1;return 0;}int into_queue(queue &q, bt_node *bp) // 入队函数{ if((q.rear+1)%maxlen==q.front) return 0;q.rear=(q.rear+1)%maxlen;q.data[q.rear]=bp;return 1;}bt_node *out_queue(queue &q) // 出队函数{// if(empty_queue(q)) return NULL;q.front=(q.front+1)%maxlen;return q.data[q.front];}bt_node *create_btree() // 建立二叉链表函数{/* 读取一个元素符号;若为空元素(以特殊字符表示), 则返回空地址;否则, 申请二叉链表新结点, 将元素符号写入该结点, 递归建立其左子树和右子树, 并返回该结点地址*/char c;c=cin.get();if(c=='_')return NULL;bt_node *p = new bt_node;p->data = c;p->lp = create_btree();p->rp = create_btree();return p;}void visit(char c) // 访问元素函数{ cout<<c<<' ';}void bt_travel_width_first(bt_node *bp) // 层次遍历二叉链表函数{/* 初始化队列;若bp非空则bp入队;当队列非空, 重复下列操作:{ 出队;访问出队指针所指结点的元素;若该结点左指针非空则入队;若该结点右指针非空则入队;}*/queue treequeue;init_queue(treequeue);if(empty_queue(treequeue))into_queue(treequeue, bp) ;while(!empty_queue(treequeue)){bt_node *p = new bt_node;p = out_queue(treequeue);cout << p->data << ' ';if(p>lp!=NULL)into_queue(treequeue, p->lp) ;if(p->rp!=NULL)into_queue(treequeue, p->rp) ;}}void main(){ bt_node *Bp; // 指向二叉树根结点的指针cout<<"Input a bitree node in root-first order: \n";Bp=create_btree();cout<<"the sequence of traveling in width-first order: "<<endl;bt_travel_width_first(Bp);cout<<endl;getch();}3.保存程序项目。

二叉树遍历讲课教案ppt课件

二叉树遍历讲课教案ppt课件
I; 中序遍历序列:D,C,B,E,H,A,G, I,F,试画出二叉树,并写出该二叉树的前序 遍历序列和中序遍历序列。
资金是运动的价值,资金的价值是随 时间变 化而变 化的, 是时间 的函数 ,随时 间的推 移而增 值,其 增值的 这部分 资金就 是原有 资金的 时间价 值
6.5 线索二叉树
§ 何谓线索二叉树? § 线索链表的遍历算法 § 如何建立线索链表?
一、问题的提出
顺着某一条搜索路径巡访二叉树 中的结点,使得每个结点均被访问一 次,而且仅被访问一次。
“访问”的含义可以很是随 时间变 化而变 化的, 是时间 的函数 ,随时 间的推 移而增 值,其 增值的 这部分 资金就 是原有 资金的 时间价 值
if (T) {
visit(T->data);
// 访问结点
Preorder(T->lchild, visit); // 遍历左子树
Preorder(T->rchild, visit);// 遍历右子树 }
}
资金是运动的价值,资金的价值是随 时间变 化而变 化的, 是时间 的函数 ,随时 间的推 移而增 值,其 增值的 这部分 资金就 是原有 资金的 时间价 值
资金是运动的价值,资金的价值是随 时间变 化而变 化的, 是时间 的函数 ,随时 间的推 移而增 值,其 增值的 这部分 资金就 是原有 资金的 时间价 值
二、先左后右的遍历算法
先(根)序的遍历算法 中(根)序的遍历算法 后(根)序的遍历算法
资金是运动的价值,资金的价值是随 时间变 化而变 化的, 是时间 的函数 ,随时 间的推 移而增 值,其 增值的 这部分 资金就 是原有 资金的 时间价 值
先(根)序的遍历算法:
若二叉树为空树,则空操作;否则, (1)访问根结点; (2)先序遍历左子树; (3)先序遍历右子树。

数据结构课程设计报告-最短路径算法-二叉树的三种遍历

数据结构课程设计报告-最短路径算法-二叉树的三种遍历

数据结构课程设计报告班级:计算机科学与技术132班姓名:赖恒财指导教师:董跃华成绩:32信息工程学院2015 年7月8日目录图的最短路径算法实现1. 需求分析 (1)1.1 程序设计内容 (1)1.2 设计要求 (1)2.概要设计 (2)3.详细设计 (2)3.1 数据类型的定义 (2)3.2 功能模块的设计 (2)3.3 主程序流程 (9)4.调试分析 (10)4.1 问题回顾和分析 (10)4.2.经验和体会 (11)5.测试结果 (12)二叉树的遍历1.设计目的 (13)2.需求分析 (14)2.1课程设计的内容和要求 (14)2.2选题的意义及背景 (14)3.概要设计 (14)3.1设计思想 (14)3.2程序数据类型 (16)3.3程序模块分析 (16)3.3.1置空栈 (16)3.3.2入栈 (17)3.3.3出栈 (17)3.3.4取栈顶操作 (17)3.3.5判空栈 (17)3.4函数关系: (18)4.详细设计 (18)4.1二叉树算法程序截图和结果 (18)5.程序测试结果及问题分析 (19)6.总结 (20)参考文献 (21)附录1 (22)附录2 (26)图的最短路径算法实现----基于floyd最短路径算法1.需求分析设计校园平面图,所含景点不少于8个。

以图中顶点表示学校内各景点,存放景点的名称、景点介绍信息等;以边表示路径,存放路径长度信息。

要求将这些信息保存在文件graph.txt中,系统执行时所处理的数据要对此文件分别进行读写操作。

1.1程序设计内容1.从文件graph.txt中读取相应数据, 创建一个图,使用邻接矩阵表示图;2.景点信息查询:为来访客人提供校园任意景点相关信息的介绍;3.问路查询:为来访客人提供校园任意两个景点之间的一条最短路径。

1.2 设计要求(1) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应。

(2) 程序要添加适当的注释,程序的书写要采用缩进格式。

二叉树的遍历 说课

二叉树的遍历 说课

《二叉树的遍历》说课稿09级计科系(1)班高怡 20091081140尊敬的各位老师:大家好!我说课的内容是数据结构(C语言版)第六章《树和二叉树》中二叉树的遍历的内容。

我将要从教材、教学目标、教学重难点、教学方法、教学准备、教学过程等六个方面进行详细阐述。

我对本课进行了如下设计:一、教材分析二叉树的遍历是二叉树中重要内容,《二叉树的遍历》是数据结构(C语言版)教材第六章第三节的内容,在此之前,学生已学习了二叉树的定义和性质,这为过渡到本节的学习起着铺垫作用。

在二叉树的一些应用中,为了在树中查找具有某种特性的结点,或者对树中全部结点逐一进行某种处理,就提出了二叉树的遍历,这样能够对二叉树的结点进行更快更好的处理。

二、学情分析作为职业中学的学生,比起高中初中的学生来说更加不爱学习,但是他们又有一定的不同,因为他们学的是专业技术,并且能够及时的开展实践,所以从这一方面说,他们又占有一定的优势。

对于所学的知识他们能够更好的学以致用,这对他们掌握知识是有一定帮助的。

三、教学目标1、知识目标:理解并掌握二叉树的三种遍历方法,并且能够准确的对二叉树进行三种遍历,能够根据给出的先序和后序正确还原一颗二叉树。

2、能力目标:培养学生自主学习,举一反三的能力。

3、情感目标:提高学生的分析问题和解决问题的能力。

四、教学重难点重点:1、学习理解二叉树的先序遍历。

2、通过对二叉树先序遍历的学习自己学会二叉树的中序和后序遍历。

3、根据给出的二叉树前序和中序遍历成功还原一颗二叉树。

难点:先序遍历、中序遍历、后序遍历的定义的理解和运用。

五、教法分析主要采用讲授法,教练法,讨论法,范例教学法。

采用例子引导,边讲边练,小组讨论的方法教学。

六、学法分析学生跟着老师,逐步理解,并自己学会分析,学会运用。

在课堂上边学边练,当堂掌握所学知识。

七、教学准备黑板,粉笔。

八、教学步骤分析本节课,我设置了3个教学环节,一是:导入新课;二是:探索新知,解决问题;三是:学以致用,当堂巩固。

数据结构实验报告-二叉树的实现与遍历

数据结构实验报告-二叉树的实现与遍历

《数据结构》第六次实验报告学生姓名学生班级学生学号指导老师一、实验内容1) 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作。

2) 输出树的深度,最大元,最小元。

二、需求分析遍历二叉树首先有三种方法,即先序遍历,中序遍历和后序遍历。

递归方法比较简单,首先获得结点指针如果指针不为空,且有左子,从左子递归到下一层,如果没有左子,从右子递归到下一层,如果指针为空,则结束一层递归调用。

直到递归全部结束。

下面重点来讲述非递归方法:首先介绍先序遍历:先序遍历的顺序是根左右,也就是说先访问根结点然后访问其左子再然后访问其右子。

具体算法实现如下:如果结点的指针不为空,结点指针入栈,输出相应结点的数据,同时指针指向其左子,如果结点的指针为空,表示左子树访问结束,栈顶结点指针出栈,指针指向其右子,对其右子树进行访问,如此循环,直至结点指针和栈均为空时,遍历结束。

再次介绍中序遍历:中序遍历的顺序是左根右,中序遍历和先序遍历思想差不多,只是打印顺序稍有变化。

具体实现算法如下:如果结点指针不为空,结点入栈,指针指向其左子,如果指针为空,表示左子树访问完成,则栈顶结点指针出栈,并输出相应结点的数据,同时指针指向其右子,对其右子树进行访问。

如此循环直至结点指针和栈均为空,遍历结束。

最后介绍后序遍历:后序遍历的顺序是左右根,后序遍历是比较难的一种,首先需要建立两个栈,一个用来存放结点的指针,另一个存放标志位,也是首先访问根结点,如果结点的指针不为空,根结点入栈,与之对应的标志位也随之入标志位栈,并赋值0,表示该结点的右子还没有访问,指针指向该结点的左子,如果结点指针为空,表示左子访问完成,父结点出栈,与之对应的标志位也随之出栈,如果相应的标志位值为0,表示右子树还没有访问,指针指向其右子,父结点再次入栈,与之对应的标志位也入栈,但要给标志位赋值为1,表示右子访问过。

数据结构_二叉树的高度与层次遍历

数据结构_二叉树的高度与层次遍历
#include<stdio.h>
#include<stdlib.h>
typedef struct BTNode
{
char data;
struct BTNode * lchild;
struct BTNode * rchild;
}BTNode;
void CreateBTree(BTNode *&T)//二叉树的先序建立
{
char ch;
scanf("%c",&ch);
if(ch=='#')
{
T=NULL;
return;
}
else
{
Q[rear]=s->rchild;
rear=(rear+1)%MAXSIZE;
}
}
}
}
int main(void)
{
BTNode *T;
CreateBTree(T);
printf("线序遍历序列如下:");
PreOrder(T);

VisitByLayer(T);
{
s=Q[front];
front=(front+1)%MAXSIZE;
printf("%c\t",s->data);
if(NULL != s->lchild)
return L>R ? L+1 :R+1;
}
}
const int MAXSIZE=100;
BTNode * Q[MAXSIZE];

数据结构二叉树遍历实验报告

数据结构二叉树遍历实验报告

问题一:二叉树遍历1.问题描述设输入该二叉树的前序序列为:ABC##DE#G##F##HI##J#K##〔#代表空子树〕请编程完成以下任务:⑴请根据此输入来建立该二叉树,并输出该二叉树的前序、中序和后序序列;⑵按层次遍历的方法来输出该二叉树按层次遍历的序列;⑶求该二叉树的高度。

2. 设计描述〔 1 〕二叉树是一种树形构造,遍历就是要让树中的所有节点被且仅被一次,即按一定规律罗列成一个线性队列。

二叉〔子〕树是一种递归定义的构造,包含三个局部:根结点〔 N〕、左子树〔 L〕、右子树〔 R〕。

根据这三个局部的次序对二叉树的遍历发展分类,总共有 6种遍历方案: NLR 、LNR 、LRN 、NRL 、RNL和 LNR 。

研究二叉树的遍历就是研究这 6种具体的遍历方案,显然根据简单的对称性,左子树和右子树的遍历可互换,即 NLR与 NRL 、LNR与 RNL 、LRN与 RLN ,分别相类似,于是只需研究 NLR 、LNR和 LRN 三种即可,分别称为先序遍历〞、中序遍历〞和后序遍历〞。

采用递归方式就可以容易的实现二叉树的遍历,算法简单且直观。

〔2〕此外,二叉树的层次遍历即按照二叉树的层次构造发展遍历,按照从上到下,同一层从左到右的次序各节点。

遍历算法可以利用队列来实现,开场时将整个树的根节点入队,然后每从队列中删除一个节点并输出该节点的值时,都将它的非空的摆布子树入队,当队列完毕时算法完毕。

〔3〕计算二叉树高度也是利用递归来实现:假设一颗二叉树为空,则它的深度为 0 ,否则深度等于摆布子树的最大深度加一。

3 .源程序1 #include <stdio.h>2 #include <stdlib.h>3 #include <malloc.h>4 #define ElemType char5 struct BTreeNode {6 ElemType data;7 struct BTreeNode* left;8 struct BTreeNode* right;9 };10 void CreateBTree(struct BTreeNode** T)11 {12 char ch;1314 if (ch == '#') *T = NULL;15 else {16 (*T) = malloc(sizeof(struct BTreeNode));17 (*T)->data = ch;18 CreateBTree(&((*T)->left));19 CreateBTree(&((*T)->right));20 }21 }22 void Preorder(struct BTreeNode* T)23 {24 if (T != NULL) {2526 Preorder(T->left);27 Preorder(T->right);28 }29 }30 void Inorder(struct BTreeNode* T)31 {32 if (T != NULL) {33 Inorder(T->left);3435 Inorder(T->right);36 }37 }38 void Postorder(struct BTreeNode* T)39 {40 if (T != NULL) {41 Postorder(T->left);42 Postorder(T->right);4344 }45 }46 void Levelorder(struct BTreeNode* BT)47 {48 struct BTreeNode* p;49 struct BTreeNode* q[30];50 int front=0,rear=0;51 if(BT!=NULL) {52 rear=(rear+1)% 30;53 q[rear]=BT;54 }55 while(front!=rear) {56 front=(front+1)% 30;57 p=q[front];5859 if(p->left!=NULL) {60 rear=(rear+1)% 30;61 q[rear]=p->left;62 }63 if(p->right!=NULL) {64 rear=(rear+1)% 30;65 q[rear]=p->right;66 }67 }68 }69 int getHeight(struct BTreeNode* T)70 {71 int lh,rh;72 if (T == NULL) return 0;73 lh = getHeight(T->left);74 rh = getHeight(T->right);7576 }77 void main(void)78 {79 struct BTreeNode* T;80 CreateBTree(&T);81 前序序列:82 Preorder(T);8384 中序序列:85 Inorder(T);-4.运行结果问题二:哈夫曼编码、译码系统1. 问题描述 对一个ASCII 编码的文本文件中的字符发展哈夫曼编码,生成编码文件; 反过来,可将编码文件译码复原为一个文本文件〔选做〕 。

二叉树的遍历教案教学设计

二叉树的遍历教案教学设计

二叉树的遍历教案教学设计教案教学设计:二叉树的遍历一、教学目标:1. 了解二叉树的遍历方式:前序遍历、中序遍历和后序遍历。

2. 能够使用递归和非递归两种方法实现二叉树的遍历。

3. 能够分析和比较不同遍历方式的时间复杂度和空间复杂度。

二、教学内容:1. 二叉树的遍历概念及分类。

2. 递归遍历算法的原理及实现。

3. 非递归遍历算法的原理及实现。

4. 比较不同遍历方式的时间复杂度和空间复杂度。

三、教学重点:1. 能够理解二叉树的遍历分类及其特点。

2. 能够使用递归和非递归两种方法实现二叉树的遍历。

四、教学难点:1. 非递归遍历算法的实现。

2. 比较不同遍历方式的时间复杂度和空间复杂度。

五、教学过程:1. 导入新知识,激发学生兴趣(5分钟)教师通过展示一棵二叉树的图片引入二叉树的遍历概念,并让学生猜测遍历的意义。

2. 介绍二叉树的遍历分类及特点(10分钟)教师介绍二叉树的遍历分类:前序遍历(根-左-右)、中序遍历(左-根-右)和后序遍历(左-右-根),并讲解每种遍历方式的特点。

3. 介绍递归遍历算法的原理及实现(15分钟)教师通过演示前序遍历的递归算法实现,介绍递归遍历的原理和递归函数的编写,让学生理解递归遍历的思路。

4. 演示递归遍历算法的应用(15分钟)教师在白板上画一棵二叉树,演示如何使用递归算法实现不同的遍历方式,并让学生跟随演示进行练习。

5. 介绍非递归遍历算法的原理及实现(15分钟)教师介绍非递归遍历算法的思路,包括使用栈数据结构进行遍历的原理及实现。

6. 演示非递归遍历算法的应用(15分钟)教师在白板上画一棵二叉树,演示如何使用非递归算法实现不同的遍历方式,并让学生跟随演示进行练习。

7. 比较不同遍历方式的时间复杂度和空间复杂度(10分钟)教师比较不同遍历方式的时间复杂度和空间复杂度,让学生了解不同的遍历方式在不同场景下的优劣。

8. 小结与作业布置(5分钟)教师对本节课进行小结,并布置作业:编写一个程序,实现二叉树的遍历,并分析所用遍历方式的时间复杂度和空间复杂度。

数据结构+二叉树及遍历课件

数据结构+二叉树及遍历课件
最 的 点被称 根(root)。 root
A
B
C
D
E F GH I J
K
L
M
node
Ver. 1.0
4
课程13
数据结构和算法
定义树结构(续)
中的每一个 点在其 下可能有子 。
root A
B
C
D
E F GH I J
K
L
M
node
Ver. 1.0
5
课程13
数据结构和算法
树结构术语 我 来 构常用的一些 。 叶子 点:指没有子 点的 点。
C 点的度 1
D节点的度为2
D
A节点的度为3
B节点的度为4
J
K
L
M
Ver. 1.0
8
课程13
数据结构和算法
树结构术语(续)
兄弟:它指同一个 点的子 点。
A
B、C和D 点互 兄弟
点。
B
C
D
E、F、G和H互为兄弟节点。
E F GH I J
K
L
M
Ver. 1.0
9
课程13
数据结构和算法
树结构术语(续)
使用 接列表来 一个二叉 。 接表示中的每个 点都具有以下信息:
数据 左子 点的引用 右子 点的引用
如果一个 点不含有左子 点或右子 点,或一个子 点都没 有,相 的左(右)子 点字段就指向NULL。
Ver. 1.0
Data
Node
18
课程13
数据结构和算法
表示一个二叉树(续)
内部 点:它指根 点与叶子 点之 的中 点 。
点的 :它指一个 点与根 点之 的距离(按 点数 目 算)。根 点永 位于0 。

数据结构课程设计_二叉树操作

数据结构课程设计_二叉树操作

数据结构课程设计_⼆叉树操作数据结构课程设计题⽬:⼆叉树的操作学⽣姓名:学号:系部名称:计算机科学与技术系专业班级:指导教师:课程设计任务书第⼀章程序要求1)完成⼆叉树的基本操作。

2)建⽴以⼆叉链表为存储结构的⼆叉树;3)实现⼆叉树的先序、中序和后序遍历;4)求⼆叉树的结点总数、叶⼦结点个数及⼆叉树的深度。

第⼆章算法分析建⽴以⼆叉链表为存储结构的⼆叉树,在次⼆叉树上进⾏操作;1先序遍历⼆叉树的操作定义为:若⼆叉树唯恐则为空操作;否则(1)访问根节点;(2)先序遍历做字数和;(3)先序遍历有⼦树;2中序遍历⼆叉树的操作定义为:若⼆叉树为空,则空操作;否则(1)中序遍历做⼦树;(2)访问根节点;(3)中序遍历有⼦树;3后续遍历⼆叉树的操作定义为:若⼆叉树为空则为空操作;否则(1)后序遍历左⼦树;(2)后序遍历右⼦树;(3)访问根节点;⼆叉树的结点总数、叶⼦结点个数及⼆叉树的深度。

第三章⼆叉树的基本操作和算法实现⼆叉树是⼀种重要的⾮线性数据结构,是另⼀种树形结构,它的特点是每个节点之多有两棵⼦树(即⼆叉树中不存在度⼤于2的结点),并且⼆叉树的结点有左右之分,其次序不能随便颠倒。

1.1⼆叉树创建⼆叉树的很多操作都是基于遍历实现的。

⼆叉树的遍历是采⽤某种策略使得采⽤树形结构组织的若⼲年借点对应于⼀个线性序列。

⼆叉树的遍历策略有四种:先序遍历中续遍历后续遍历和层次遍历。

基本要求1 从键盘接受输⼊数据(先序),以⼆叉链表作为存储结构,建⽴⼆叉树。

2 输出⼆叉树。

3 对⼆叉树进⾏遍历(先序,中序,后序和层次遍历)4 将⼆叉树的遍历打印出来。

⼀.问题描述⼆叉树的很多操作都是基于遍历实现的。

⼆叉树的遍历是采⽤某种策略使得采⽤树型结构组织的若⼲结点对应于⼀个线性序列。

⼆叉树的遍历策略有四种:先序遍历、中序遍历、后序遍历和层次遍历。

⼆.基本要求1.从键盘接受输⼊数据(先序),以⼆叉链表作为存储结构,建⽴⼆叉树。

2.输出⼆叉树。

数据结构实验三——二叉树基本操作及运算实验报告

数据结构实验三——二叉树基本操作及运算实验报告

《数据结构与数据库》实验报告实验题目二叉树的基本操作及运算一、需要分析问题描述:实现二叉树(包括二叉排序树)的建立,并实现先序、中序、后序和按层次遍历,计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目,以及二叉树常用运算。

问题分析:二叉树树型结构是一类重要的非线性数据结构,对它的熟练掌握是学习数据结构的基本要求。

由于二叉树的定义本身就是一种递归定义,所以二叉树的一些基本操作也可采用递归调用的方法。

处理本问题,我觉得应该:1、建立二叉树;2、通过递归方法来遍历(先序、中序和后序)二叉树;3、通过队列应用来实现对二叉树的层次遍历;4、借用递归方法对二叉树进行一些基本操作,如:求叶子数、树的深度宽度等;5、运用广义表对二叉树进行广义表形式的打印。

算法规定:输入形式:为了方便操作,规定二叉树的元素类型都为字符型,允许各种字符类型的输入,没有元素的结点以空格输入表示,并且本实验是以先序顺序输入的。

输出形式:通过先序、中序和后序遍历的方法对树的各字符型元素进行遍历打印,再以广义表形式进行打印。

对二叉树的一些运算结果以整型输出。

程序功能:实现对二叉树的先序、中序和后序遍历,层次遍历。

计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目。

对二叉树的某个元素进行查找,对二叉树的某个结点进行删除。

测试数据:输入一:ABC□□DE□G□□F□□□(以□表示空格),查找5,删除E预测结果:先序遍历ABCDEGF中序遍历CBEGDFA后序遍历CGEFDBA层次遍历ABCDEFG广义表打印A(B(C,D(E(,G),F)))叶子数3 深度5 宽度2 非空子孙数6 度为2的数目2 度为1的数目2查找5,成功,查找的元素为E删除E后,以广义表形式打印A(B(C,D(,F)))输入二:ABD□□EH□□□CF□G□□□(以□表示空格),查找10,删除B预测结果:先序遍历ABDEHCFG中序遍历DBHEAGFC后序遍历DHEBGFCA层次遍历ABCDEFHG广义表打印A(B(D,E(H)),C(F(,G)))叶子数3 深度4 宽度3 非空子孙数7 度为2的数目2 度为1的数目3查找10,失败。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计--按层次遍历二叉树学号:题目按层次遍历二叉树学院计算机科学与技术专业计算机科学与技术班级姓名指导教师2013年6月20日11问题描述及要求 (4)1.1问题描述 (4)1.2任务要求.................................. 4 2 开发平台及所使用软件.............................. 4 3 程序设计思路.. (5)3.1二叉树存储结构设计 (5)3.2题目算法设计 (5)3.2.1 建立二叉树 (5)3.2.2 遍历二叉树 (5)3.3.3 按要求格式输出已建立的二叉树 (6)3.3 测试程序................................ 6 4 调试报告.................................... 6 5 经验和体会.................................. 6 6源程序清单及运行结果 (7)6.1 源程序清单 (7)6.2 运行结果................................ 9 7 参考文献...................................10 本科生课程设计成绩评定表 (11)2课程设计任务书学生姓名:专业班级:计科ZY1102班指导教师:工作单位:计算机科学系题目: 按层次遍历二叉树初始条件:编写按层次顺序(同一层自左至右)遍历二叉树的算法。

(1)二叉树采用二叉链表作为存储结构。

⑵按严蔚敏《数据结构习题集(C语言版)》p44面题6.69所指定的格式输出建立的二叉树。

(3)输出层次遍历结果。

(4)自行设计测试用例。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1.问题描述简述题目要解决的问题是什么。

2. 设计存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;3. 调试报告调试过程中遇到的问题是如何解决的; 对设计和编码的讨论和分析。

4. 经验和体会(包括对算法改进的设想)5. 附源程序清单和运行结果。

源程序要加注释。

如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。

说明:1. 设计报告、程序不得相互抄袭和拷贝; 若有雷同,则所有雷同者成绩均为0 分。

2. 凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0 分记。

时间安排:1(第17周完成,验收时间由指导教师指定2(验收地点:实验中心3(验收内容:可执行程序与源代码、课程设计报告书。

指导教师签名:2013年6月14日系主任(或责任教师)签名:年月曰3数据结构课程设计--- 按层次遍历二叉树1问题描述及要求1.1问题描述编写按层次顺序(同一层自左至右)遍历二叉树的算法,并将二叉树按指定格式输出。

(题集p44面题6.69所指定的格式)指定格式如下:B图一: 指定输出格式1.2 任务要求编写按层次顺序(同一层自左至右) 遍历二叉树的算法。

(1) 二叉树采用二叉链表作为存储结构。

(2) 按题集p44面题6.69所指定的格式输出建立的二叉树(3) 输出层次遍历结果。

(4) 测试用例自己设计。

2 开发平台及所使用软件Windows 7.0 , Visual Studio201043 程序设计思路3.1 二叉树存储结构设计struct BinTreeNode // 二叉树用二叉链表存储{char data; // 二叉树结点值为字符型BinTreeNode* leftchild; // 左孩子指针BinTreeNode*rightchild; // 右孩子指针}3.2 题目算法设计3.2.1 建立二叉树void BinTree::creatBinTree(istream& in,BinTreeNode*&subTree) // 通过输入流in 建立二叉树{char item;cin.get(item);if(item!=' '){subTree=new BinTreeNode(item); creatBinTree(in,subTree->leftchild); creatBinTree(in,subTree->rightchild);}else{subTree=NULL;}};3.2.2 遍历二叉树void BinTree::levelOrder(BinTreeNode* subTree) // {queue<BinTreeNode *>q;BinTreeNode*p=subTree;q.push(p);while(!q.empty()) // 若树非空{p=q.front();cout<<visit(p)<<" "; // 输出队头元素q.pop(); if(p->leftchild!=NULL){q.push(p->leftchild);} //if(p->rightchild!=NULL){q.push(p->rightchild);}}};333按要求格式输出已建立的二叉树按层次序遍历二叉树左子树非空,入队void Prin t_Bi nTree(Bi nTreeNode* Tree,i nt i) // 按要求格式输出已建立的二叉树i表示结点所在层次。

初始i=0 {Bin TreeNode*p=Tree;if(p->rightchild) Prin t_Bi nTree(Tree->rightchild,i+1); // 递归函数for(int j=1;j<=i;j++) cout<<" "; // 打印i 个空格表示层次cout<<p->data<<e ndl;if(p->leftchild) Prin t_Bi nTree(Tree->leftchild,i+1);};图2: 测试二叉树如图所示二叉树,按先序遍历顺序输入,AB#D##CE#F###其中” #”代表空格,二叉树是:A为根节点,A左孩子是B,右孩子是C,B的左孩子为空,右孩子为D, C的左孩子为E,右孩子为空,E的左孩子为空,右孩子为F。

根据以下程序运行结果( 见图4) 可知,程序正确运行。

若输入AB#D#CE#F###则程序出现错误,不能运行。

(见图3)4 调试报告1、在建立二叉树时,输入的格式一定要正确,没有孩子的要用空格表示,在测试用例中,F没有孩子,要用两个空格表示,如果输入“ AB#D##CE#F则没有输出结果。

2、起初编写输出程序(void Print_BinTree(BinTreeNode* Tree,int i)) 的时候,始终显示编译无错误,但是不能运行,出现了一堆有关内存分配错误的问题。

最后发现没有将指针指向结点。

经改正,运行成功。

5 经验和体会本程序的建立和遍历二叉树的程序都比较简单,关键在于按要求打印二叉树。

起初一直6 找不到合适的方法按题目要求打印二叉树,在和同学讨论了很久之后终于有了思路。

在调试程序的时候也出现了问题,起初没有在意输入方式对程序运行结果的影响,导致程序无法运行,在检查了很久之后终于找到了问题的所在,对输入进行了改正,得到了正确的结果。

除此之外,编写C++程序的过程中,指针时钟是个难点也是个重点,今后要多练习,多理解才行。

6源程序清单及运行结果6.1 源程序清单#include<iostream> #include<queue> using namespace std;structBinTreeNode // 定义结构体{char data;BinTreeNode* leftchild;BinTreeNode*rightchild;BinTreeNode():leftchild(NULL),rightchild(NULL){}// 结构体可以有构造函数BinTreeNode(intx,BinTreeNode*l=NULL,BinTreeNode*r=NULL):data(x),leftchild(l),rightchild(r){}};class BinTree{private:BinTreeNode* root;public:BinTree():root(NULL){}; // 构造函数,构造一棵空的二叉树BinTreeNode*getroot(){return root;}BinTree(const BinTree&s); // 复制构造函数~BinTree(){destroy(root);} // 析构函数void destroy(BinTreeNode* subTree); // 删除void creatBinTree(istream&in,BinTreeNode* &subTree); //树friend istream& operator>>(istream& in,BinTree & Tree); //输入void levelOrder(BinTreeNode* subTree); // 层次序遍历char visit(BinTreeNode*p){return p->data;}; // 取值};istream& operator>>(istream& in,BinTree& Tree)// 重载操作: 输入并建立一棵二叉树。

in 是输入流对象{Tree.creatBinTree(in,Tree.root);return in;7};void BinTree::creatBinTree(istream& in,BinTreeNode*&subTree) // 从输入流in 输入二叉树表示建立对应的二叉链表{char item;cin.get(item);if(item!=' '){subTree=new BinTreeNode(item);creatBinTree(in,subTree->leftchild);creatBinTree(in,subTree->rightchild);}else 从文件读入建重载操作:subTree=NULL;}};void BinTree::levelOrder(BinTreeNode* subTree) { queue<BinTreeNode *>q; BinTreeNode*p=subTree; q.push(p); while(!q.empty()) // 队列不空{ p=q.front();cout<<visit(p)<<" "; q.pop();if(p->leftchild!=NULL){q.push(p->leftchild);} //if(p->rightchild!=NULL){q.push(p->rightchild);} //}};Void BinTree::destroy(BinTreeNode*subTree) // if(subTree!=NULL){ destroy(subTree->leftchild);destroy(subTree->rightchild); delete subTree;左子女进队右子女进队释放空间{}};void Print_BinTree(BinTreeNode* Tree,int i)// 按要求输出二叉树,i 表示结点所在层次,初次调用为0 8{ BinTreeNode*p=Tree;if(p->rightchild) Print_BinTree(Tree->rightchild,i+1);for(int j=1;j<=i;j++) cout<<""; // 打印i 个空格表示层次cout<<p->data<<endl; // 打印元素,换行if(p->leftchild) Print_BinTree(Tree->leftchild,i+1);};int main(){BinTree Tree;int a;int i=0;cout<<" 请按照前序遍历的方法,输入初始值,每段空格结束<<endl; cin>>Tree;BinTreeNode*p=Tree.getroot();cout<<endl;cout<<" 层序遍历为:"<<endl;Tree.levelOrder(p);cout<<endl;cout<<" 按树形打印输出二叉树"<<endl;10 Prin t_Bi nTree(p,i);cin>>a;return 0;}6.2运行结果图三:输入错误的运行结果9图四:输入正确的运行结果7参考文献[1] 《数据结构习题集(C 语言版)》,严蔚敏,吴伟民,米宁编著,清华大学 出版社,出版或修订时间:1999年2月[2] 《数据结构(用面向对象方法与C+H 语言描述)(第二版)》,殷人昆主编,清 华大学出版社,出版或修订时间:2007年6月[3] 《C++S 序设计》,闵联营,何克右编写,清华大学出版社, 2010年8月本科生课程设计成绩评定表班级姓名: 学号: 序号评分项目满分实得分1 学习态度认真、遵守纪律102 设计分析合理性103 设计方案正确性、可行性、创造性204 设计结果正确性405 设计报告的规范性106 设计验收10总得分/ 等级评语:注: 最终成绩以五级分制记。

相关文档
最新文档