• 关于

    线索二叉树

    的搜索结果

回答

第一部分 基本概念第1章 数据结构基础1.1 问题求解分析1.2 数据结构1.3 数据结构的分类1.4 数据的四种基本存储方法1.5 数据结构三方面的关系习题第2章 算法及算法分析基础2.1 算法的基本概念2.2 算法的描述2.3 算法分析方法2.4 程序语言的基本语句与基本结构2.5 数组与结构2.6 抽象数据类型的表示与定义习题第二部分 简单数据结构第3章 线性表3.1 线性表的定义3.2 线性表的运算3.3 线性表的顺序存储结构及实现3.3.1 线性表的顺序存储结构3.3.2 顺序表的实现3.4 线性表的链式存储结构及实现3.4.1 单链表3.4.2 循环链袁3.4.3 双向链表3.4.4 静态链表3.4.5 顺序表和链表的比较3.5 线性表的应用习题第4章 栈和队列4.1 栈4.1.1 问题的提出4.1.2 定义及其操作4.1.3 栈的存储结构及实现4.1.4 栈的应用举例:表达式求值4.2 队列4.2.1 问题的提出4.2.2 队列的定义及操作4.2.3 队列的存储结构及实现4.2.4 队列的应用举例习题第5章 矩阵和广义表5.1 矩阵的存储5.2 特殊矩阵5.3 稀疏矩阵5.4 广义表习题第三部分 复杂数据结构第6章 二叉树和树6.1 二叉树的定义和性质6.1.1 二叉树的定义及相关术语6.1.2 特殊二叉树6.1.3 二叉树的性质6.2 二叉树的存储结构6.2.1 二叉树的顺序存储表示6.2.2 二叉树的链式存储表示6.3 二叉树的遍历6.3.1 问题的提出6.3.2 二叉树的遍历算法6.3.3 二叉树遍历的非递归实现6.3.4 遍历算法的应用6.4 二叉树的线索化6.4.1 线索二叉树的定义6.4.2 线索二叉树的结构6.4.3 二叉树的线索化算法6.4.4 线索二叉树基本操作的实现6.5 二叉树的应用——哈夫曼树……第7章 图第8章 散列结构第9章 集合结构第四部分 算法与数据结构应用

琴瑟 2019-12-02 01:22:41 0 浏览量 回答数 0

问题

关于数据结构二叉树的内容

DM。 2020-05-28 13:30:44 3 浏览量 回答数 1

回答

下面是我以前写的程序对你是否有帮助 #include "iostream.h" #include "string.h" #include "malloc.h" #include "stdio.h" typedef struct btree { int data;//树结点的值域 int ltag,rtag;//树结点的左右线索 struct btree *left,*right;//树结点的左右指针,ltag,rtag=1时指向前驱和后继,否则指向左右孩子 }node; node *SearchNode(node *q,node *r) {//在根结点地址为q的中序线索二叉树中查找结点r将要插入的结点 node *p; p=q; while(1) { while(r->data<p->data&&p->ltag!=1){p=p->left;}//一直向左寻找 while(r->data>p->data&&p->rtag!=1){p=p->right;}//一直向右寻找 if(r->data<p->data&&p->ltag==1||r->data>p->data&&p->rtag==1||r->data==p->data)break; //当r->data<p->data并且p没有左孩子或r->data>p->data并且p没有由孩子 //或r->data==p->data时,结点p找到,跳出循环 } return(p);//返回p结点 } node *InsertNode(node *rot,node *s) {//在根结点地址为rot的中序线索二叉树中插入结点s node *p; if(rot==NULL) {//如果根结点为空,s结点作为根结点插入。 rot=s; rot->data=s->data; rot->ltag=1; rot->left=NULL; rot->rtag=1; rot->right=NULL; return(rot); } p=SearchNode(rot,s);//调用SearchNode函数查找s将要插入的结点p的位置 if(s->data==p->data) {//如果结点在树中已经存在,释放该结点并返回 free(s); return(rot); } if(s->data<p->data) {//如果s->data<p->data,则做为p的左孩子插入,此时s的前驱是插入前p的前驱,s的后继是p s->ltag=1; s->left=p->left; s->rtag=1; s->right=p; p->ltag=0; p->left=s; } if(s->data>p->data) {//如果s->data>p->data,则做为p的右孩子插入,此时s的后继是插入前p的后继,s的前驱是p s->rtag=1; s->right=p->right; s->ltag=1; s->left=p; p->rtag=0; p->right=s; } return(rot); } node *CreatTree(node *rt) {//以根结点为空开始构造中序线索二叉排序树,并返回根结点的地址 int m;//用于输入根结点的值域 node *q; while(1) { printf("Please input number:\nm="); //scanf("%d",&m); cin>>m;//输入结点的值 if(m==-1) return(rt); node *s;//建一个有待插入的新结点 s=(node *)malloc(sizeof(node));//给s开辟一个结点空间 s->data=m; q=InsertNode(rt,s);//调用InsertNode函数一个个结点插入已生成的中序线索二叉树中,形成新的树 rt=q; } return(rt); } node *Search(node *root,int x) {//在根结点地址为root的中序线索二叉树中查找结点值为x的结点p并返回p,若结点不存在则返回NULL。 node *p;//返回值为x的结点的位置 p=root; while(1) { while(x<p->data&&p->ltag!=1){p=p->left;} while(x>p->data&&p->rtag!=1){p=p->right;} if(x<p->data&&p->ltag==1||x>p->data&&p->rtag==1||x==p->data)break; } if(x!=p->data) p=NULL; return(p); } node *P_Next(node *root,int x) {//查找根结点地址为root的中序线索二叉树中结点值为x的结点p按后序遍历的后继结点q node *p,*q;//p是结点值为x的结点,q用来返回p按后序遍历的后继结点 p=Search(root,x);//调用Search函数查找结点p的位置 if(p==NULL)//值为x结点不存在,出错 { return NULL; } if(p->ltag==0) return(p->left);//如果此结点有左孩子,返回左孩子结点 else { if(p->rtag==0) return(p->right);//如果此结点无左孩子有右孩子,返回右孩子结点 else//如果此结点为叶子结点 { q=p->right;//寻找此结点的后继结点 if(q==NULL)//后继为空,此结点是按前序遍历的最后一个结点,返回空 { printf("this node is last node\n"); return NULL; } else { while(q->rtag==1&&q->right!=NULL) {q=q->right;}//如果结点的后继没有右孩子,一直向后继方向寻找结点 if(q->right==NULL) { return NULL; } else return(q->right);//返回结点的右孩子结点 } } } } void display(node *t) {//非递归中序遍历中序线索二叉排序树 printf("中序序列为:"); while(t->ltag!=1){t=t->left;}//寻找最左结点,即中序遍历的第一个结点 while(t!=NULL) { printf("%d ",t->data);//打印结点值 while(t->rtag==1)//结点右指针指向后继结点 { t=t->right; if(t==NULL)return;//t空,遍历结束 else printf("%d ",t->data);//打印结点值 } if(t->rtag==0)//如果结点有右孩子 { t=t->right;//从右孩子结点开始 while(t->ltag!=1){t=t->left;}//继续向左寻找此子树的最左结点 } } } void main() { int w; printf("输入一串正整数建立一棵中序线索二叉排序树最后以-1作为结束标志\n"); node *root; root=NULL; node *p; node *q; p=CreatTree(root); display(p); while(1) { cout<<"\n查找按前序遍历x的后继结点\nx="; cin>>w; q=P_Next(p,w); if(q==NULL) cout<<"此结点不在树中或是按前序遍历的最后一个结点\n"; else { cout<<"\n此结点的后继结点为:"; cout<<q->data; } } }

一键天涯 2019-12-02 01:24:06 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

算法工程师必知必会10大基础算法! 6月23日 【今日算法】

游客ih62co2qqq5ww 2020-06-23 13:36:00 6 浏览量 回答数 1
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅