




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
上机题(1)编写完整程序,用先序遍历法建立二叉树的二叉链表存储结构。输出该二叉树的先、中、后序遍历结点访问次序以及层次遍历结点访问次序。(建议结点数据域类型为char)/ erchashu.cpp : Defines the entry point for the console application./#include stdafx.h#include#includetypedef struct node char data; struct node *lchild, *rchild; *BiT, BiTNode;BiT crtBT() char ch; BiT bt; ch=getchar(); if(ch=#) return NULL; bt=new BiTNode(); bt-data=ch; bt-lchild=crtBT(); bt-rchild=crtBT(); return bt; void preorder(BiT bt) if(bt) printf(%c,bt-data); preorder(bt-lchild); preorder(bt-rchild); /printf(n);void midorder(BiT bt) if(bt) midorder(bt-lchild); printf(%c,bt-data); midorder(bt-rchild); /printf(n);void lasorder(BiT bt) if(bt) lasorder(bt-lchild); lasorder(bt-rchild); printf(%c,bt-data); /printf(n);int main(int argc, char* argv) BiT bt;bt=crtBT(); preorder(bt);printf(n);midorder(bt);printf(n);lasorder(bt);printf(n); return 0;(2)从键盘输入n个数据建立n元完全二叉树顺序存储结构。实现该完全二叉树的先、中、后序遍历。#include stdafx.h#include#includevoid preorder(int j,int i,char *s) if (ji) return; printf(%c,sj); preorder(j*2+1,i,s); preorder(j*2+2,i,s); void midorder(int j,int i,char *s) if (ji) return; preorder(j*2+1,i,s); printf(%c,sj); preorder(j*2+2,i,s); void lasorder(int j,int i,char *s) if (ji) return; preorder(j*2+1,i,s); preorder(j*2+2,i,s); printf(%c,sj);int main(int argc, char* argv) int i=0; char *bt;char s100;scanf(%s,s);bt=s;while(si!=0) i+;/printf(%dn,i); preorder(0,i,bt);printf(n);midorder(0,i,bt);printf(n);lasorder(0,i,bt);printf(n); return 0;算法(1)已知二叉树(二叉链表)根结点指针为bt,求该二叉树中的叶子数目。int preorder(BiT bt)int k=0; if(bt) if(!bt-lchild&!bt-rchild) k+; preorder(bt-lchild); preorder(bt-rchild); return k;(2)已知某二叉树(三叉链表)的根结点地址root,该树中各结点的左、右儿子指针域已正确填充,写一个算法将所有结点的双亲指针域正确填充。void preorder(BiT bt)if(bt=root) return ; if(bt) bt-lchild-parent=bt; bt-rchild-parent=bt; preorder(bt-lchild); preorder(bt-rchild); (3)已知某二叉树(二叉链表)的根结点指针bt。编写算法,将该二叉树中所有结点的左右子树互换。void preorder(BiT bt)char c; if(bt) c=bt-lchild;bt-lchild=bt-rchild; bt-rchild=c; preorder(bt-lchild); preorder(bt-rchild); (4) 已知n个结点的完全二叉树结点数据域值按结点编号次序顺序存于一维数组(元素下标范围0.n-1)。编写算法,由该数组首地址以及数组长度n建立对应的二叉链表存储结构。void preorder(BiT bt,int n,char *s,int j) if(bt) bt-lchild=s2*j+1; bt-rchild=s2*j+2; preorder(bt-lchild); preorder(bt-rchild); /*调用方式数组:chn;s=ch;j=0;preorder(BiT bt,int n ,char *s,int j)*/上机题(1)编写完整程序,实现中序遍历线索二叉树存储结构、线索化以及中序遍历。#include stdafx.h#include#includeenum PT LINK, THREAD ; typedef struct node char data;struct node *lchild, *rchild;enum PT ltag, rtag; *SBiT, SBiT_Node;SBiT crtSBT()char ch; SBiT bt; ch=getchar(); if(ch=#) return NULL; bt=new SBiT_Node(); bt-data=ch; bt-lchild=crtSBT(); bt-rchild=crtSBT(); return bt; SBiT first(SBiT bt) while(bt&bt-ltag=LINK) bt=bt-lchild;return bt;/SBiT next(SBiT p) if(p-rtag=THREAD) return p-rchild; return first(p-rchild); void midtravel(SBiT p,SBiT root) p=first(root);while(p) printf(%c,p-data); p=next(p); void mit(SBiT bt, SBiT &pr) if(bt) mit(bt-lchild, pr);if(pr) if(pr-rchild) pr-rtag=LINK;else pr-rtag=THREAD; pr-rchild=bt; if(bt-lchild) bt-ltag=LINK;else bt-ltag=THREAD; bt-lchild=pr; pr=bt;mit(bt-rchild, pr);int main(int argc, char* argv) SBiT bt;bt=crtSBT();SBiT pr=NULL;mit(bt, pr);pr-rtag=THREAD;midtravel(pr,pr);printf(n); return 0;(2) 编写完整程序,用堆栈实现前/中/后序非递归遍历,并与递归遍历结果比较。#include#includetypedef struct Nodechar data; Node *leftchild; Node *rightchild;Node;/* 初始化一棵二叉树排序树。*/void InitBinaryTree(Node*root,char elem) *root=(Node*)malloc(sizeof(Node); if(!(*root) printf(Memory allocation for root failed.n); return; (*root)-data=elem; (*root)-leftchild=NULL; (*root)-rightchild=NULL;/* 向二叉树排序树中插入结点。*/void InsertNode(Node *root,char elem) Node *newnode=NULL; Node *p=root,*last_p=NULL; newnode=(Node*)malloc(sizeof(Node); if(!newnode) printf(Memory allocation for newnode failed.n); return; newnode-data=elem; newnode-leftchild=NULL; newnode-rightchild=NULL; while(NULL!=p) last_p=p; if(newnode-datadata) p=p-leftchild; else if(newnode-datap-data) p=p-rightchild; else printf(Node to be inserted has existed.n); free(newnode); return; p=last_p; if(newnode-datadata) p-leftchild=newnode; else p-rightchild=newnode; /* 创建一棵二叉树排序树。*/void CreatBinarySearchTree(Node *root,char data,int num) int i; for(i=0;idata); PreOrderRec(root-leftchild); PreOrderRec(root-rightchild); /* 前序遍历二叉树,非递归方法。*/void PreOrderNoRec(Node *root)printf(非递归方法:); Node *p=root; Node *stack30; int num=0; while(NULL!=p|num0) while(NULL!=p) printf(%c ,p-data); stacknum+=p; p=p-leftchild; num-; p=stacknum; p=p-rightchild; printf(n);/* 中序遍历二叉树,递归方法。*/void InOrderRec(Node *root) if(NULL!=root) InOrderRec(root-leftchild); printf(%c ,root-data); InOrderRec(root-rightchild); /* 中序遍历二叉树,非递归方法,使用栈。*/void InOrderNoRec(Node *root)printf(非递归方法:); Node *p=root; int num=0; Node *stack30; while(NULL!=p|num0) while(NULL!=p) stacknum+=p; p=p-leftchild; num-; p=stacknum; printf(%c ,p-data); p=p-rightchild; printf(n);/* 后序遍历二叉树,递归方法。*/void PostOrderRec(Node *root) if(NULL!=root) PostOrderRec(root-leftchild); PostOrderRec(root-rightchild); printf(%c ,root-data); /* 后序遍历二叉树,非递归方法。*/void PostOrderNoRec(Node *root)printf(非递归方法:); Node *p=root; Node *stack30; int num=0; Node *have_visited=NULL; while(NULL!=p|num0) while(NULL!=p) stacknum+=p; p=p-leftchild; p=stacknum-1; if(NULL=p-rightchild|have_visited=p-rightchild) printf(%c ,p-data); num-; have_visited=p; p=NULL; else p=p-rightchild; printf(n);int main() Node *root=NULL; int num=0; char data=A,B,C,D,E,F,G; num=sizeof(data)/sizeof(char); CreatBinarySearchTree(&root,data,num); printf(前序遍历二叉树:n); PreOrderNoRec(root); PreOrderRec(root); printf(n); printf(中序遍历二叉树:n); InOrderNoRec(root); InOrderRec(root); printf(n); printf(后序遍历二叉树:n); PostOrderNoRec(root); PostOrderRec(root); printf(n); return 0;算法(1)二叉树的直径定义为从根结点至叶子的最大路径长度。编写算法,求二叉树(二叉链表)的直径。int height(BiT bt) if(!bt) return 0; hl=height(bt-lchild)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 诸暨洗车小知识培训课件
- 说明文课件教学课件
- 2025年家用电器微波炉买卖合同
- 2025使用场地合同范本
- 红色的画课件
- 诗词知识培训总结报告课件
- 2025年绿色能源项目合同范本
- 红楼梦前二十回课件
- 2025年新能源汽车电池热失控预警与防护技术应用策略报告
- 红楼梦人物课件教学
- 临时占用城市绿地施工方案
- 脓毒症指南课件
- 胸腔积液诊断的中国专家共识(2022版)解读
- 五年级上册语文摘抄笔记
- 对颈椎概念和命名的再认识
- JJG 539-2016数字指示秤
- 辽宁盘锦浩业化工“1.15”泄漏爆炸着火事故警示教育
- 小学信息技术人工智能教学案例
- 服装零售业概况
- sg1000系列光伏并网箱式逆变器通信协议
- 专升本03297企业文化历年试题题库(考试必备)
评论
0/150
提交评论