二叉树实验报告

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

} btree createbtree(int *data,int len) { btree root=NULL; int i; for (i=0;i<len;i++) root=insertnode(root,data[i]); return root; } void preorder(btree ptr) { if(ptr!=NULL) { printf("[%2d]\n",ptr->data); preorder(ptr->left); preorder(ptr->right); } } void main() { btree root =NULL; int data[9]={5,6,4,8,2,3,7,1,9}; root=createbtree(data,9); printf("out put the btree:\n"); preorder(root); } 2.二叉树的后序遍历代码 /*-------二叉树后序遍历------*/ # include"stdlib.h" struct tree { int data; struct tree *left; struct tree *right; };
三、实验步骤
根据例题基本操作写好源程序,基本操作在例题中基本给出,写出主函 数,调试分析程序,找出错误,并修改后程序能够运行,并且得出正确 的输出。 1. 二叉树的前序遍历代码 /*-------二叉树先序遍历------*/
# include"stdlib.h" struct tree { int data; struct tree *left; struct tree *right; }; typedef struct tree treenode; typedef struct tree *btree; btree insertnode(btree root,int value) { btree newnode; btree current; btree back; newnode=(btree)malloc(sizeof(treenode)); newnode->data=value; newnode->left=NULL; newnode->right=NULL; if(root==NULL){ return newnode;} else{ current=root; while(current!=NULL) { back=current; if(current->data>value) current=current->left; else current=current->right; } if(back->data>value) back->left=newnode; else back->right=newnode; } return root;
return root; } void postorder(btree ptr) { if(ptr!=NULL) { postorder(ptr->left); postorder(ptr->right); printf("[%2d]\n",ptr->data); } } void main() { btree root =NULL; int data[9]={5,6,4,8,2,3,7,1,9}; root=createbtree(data,9); printf("out put the btree:\n"); postorder(root); }
一、实验目的
1.掌握树的基本概念、二叉树的基本操作; 2.重点掌握二叉树的生成、遍历及求深度等算法; 3.掌握赫夫曼树的含义及其应用。
ຫໍສະໝຸດ Baidu
二、实验内容
1.编写程序实现二叉树的前序遍历的算法 【问题描述】 前序遍历的方式是每遍历到一个结点就立刻处理结点。便利的顺序 是先向着树的左方走直到无法前进后,才转往右方走。 【基本要求】 首先穿火箭二叉树,然后编写前序遍历函数,最后编写主函数。 【测试数据】 如图3-1所示二叉树的前序遍历结果为:1,2,4,5,3,6。 2.编写程序实现二叉树的后序遍历的算法 【问题描述】 后序遍历的方式刚好和前序遍历的方式相反,他是等到结点的两个 子结点都遍历过后才运行处理。 【基本要求】 首先创建二叉树,然后编写后序遍历的函数,最后编写主函数。 【测试数据】 如图3-1所示二叉树的后续遍历结果为:4,5,2,6,3,1。
typedef struct tree treenode; typedef struct tree *btree; btree insertnode(btree root,int value) { btree newnode; btree current; btree back; newnode=(btree)malloc(sizeof(treenode)); newnode->data=value; newnode->left=NULL; newnode->right=NULL; if(root==NULL){ return newnode;} else{ current=root; while(current!=NULL) { back=current; if(current->data>value) current=current->left; else current=current->right; } if(back->data>value) back->left=newnode; else back->right=newnode; } return root; } btree createbtree(int *data,int len) { btree root=NULL; int i; for (i=0;i<len;i++) root=insertnode(root,data[i]);
四、实验结果分析
1.二叉树的前序遍历运行结果
2. 二叉树的后序遍历运行结果
五、实验总结
做实验贵在坚持,这是通过这次试验我感受最为深刻的。其次,我了 解到,树形结构是一类重要的非线性数据结构。其中以树和二叉树最为 常用,直观看来,树是以分支关系定义的层次结构。二叉树是另一种树 形结构,它的特点是每个节点至多只有两棵子树(即二叉树不存在度大 于2的节点),并且,二叉树的子树有左右之分,其次序不能任意颠 倒。还有,在这次实验中我了解到,3种遍历算法之不同之处仅在于访 问根节点和遍历左、右子树的先后关系。如果在算法中暂且抹去和递归 无关的Visit语句,则三个遍历算法完全相同。由此,从递归执行过程的 角度来看先序、中序和后序遍历也是完全相同的。
相关文档
最新文档