计算机软件技术(第6章)课件及作业.ppt

  1. 1、本文档共98页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机软件技术(第6章)课件及作业

电子工程学院 * (2)二叉排序树的二叉链表结点结构定义 typedef int keytype; typedef struct{ keytype key; //关键字项 datatype other; // 其它数据项 struct node *lchild, *rchild; //左、右指针域 } bstnode; 电子工程学院 * (3)二叉排序树的构造 构造一棵二叉排序树,就是从空的二叉排序树开始,逐个结点插入到二叉排序树中。 对于一组数据元素{ R1, R2, …, Rn } , 可按以下方法来构造二叉排序树: (1) 令R1为二叉树的根或子树的根; (2) 若R2R1,R2为R1左子树的根结点; (3) 若R2R1,R2为R1右子树的根结点; (4) 若R2=R1,则R2不插入。 (5) 对R3, …, Rn结点也是依次与前面生成的结点进行比较,确定结点插入的位置。 电子工程学院 * 说明 (1)每次插入的新结点都是当前二叉排序树的叶子结点; (2)给定的关键字序列不同,二叉排序树的形态则不同; (3)二叉排序树中不存在两个结点的关键字相同的结点。 电子工程学院 * 【例】给定关键字序列10、18、3、8、12、2、7、3,建立二叉排序树。 电子工程学院 * 【例】给定关键字序列8、10、2、12、18、3、7、3,建立二叉排序树。关键字的序列不同,二叉排序树的形态不同。 电子工程学院 * (4)二叉排序树的生成算法 ① 二叉排序树插入新结点的递归算法 void INSERTBST1(bstnode *t, bstnode *s ) // t为二叉排序树的根指针,s为插入的结点指针 { if (t==NULL) t=s; //原树为空, 返回s作为根指针 else { if (s-keyt-key) INSERTBST1( t-lchild, s ); // 在左子树中查找插入位置 if (s-keyt-key) INSERTBST1( t-rchild, s ); // 在右子树中查找插入位置 } } 电子工程学院 * ② 二叉排序树插入新结点的非递归算法 bstnode *INSERTBST2 (bstnode *t, bstnode *s) // t为二叉排序树的根指针,s为插入的结点指针 { bstnode * f, *p; p=t; while ( p!=NULL ) { f=p; // f指向 *p结点双亲 if (s-key= =p-key) return t; //树中已有结点*s;不插入 if (s-key p -key ) p=p-lchild; //在左子树中查找插入位置 else p=p-rchild; // 在右子树中查找插入位置 } if (t = = NULL) return s; //原树为空, 返回s作为根指针 if (s - keyf - key) f - lchild=s; //将*s插入为*f的左孩子 else f - rchild =s; // 将*s插入为*f的右孩子 return t; } 电子工程学院 * ③ 二叉排序树的生成算法 bstnode *CREATBST( ) //生成二叉排序树 { bstnode *t, *s; keytype key , endflag=0; // endflag为结点结束标志 datatype data; t=NULL; // 设置二叉排序树的初态为空树 scanf (“ %d ”,key); //读入一个结点的关键字 while( key != endflag) //输入非结束标志,执行以下操作 { s=( bstnode*)malloc( sizeof ( bstnode ) ); // 申请新结点 s - lchild = s - rchild = NULL; // 赋初值 s - key = key; scanf ( “ %d ”, data ); //读入结点的其它数据项 s - other = data; t=INSERTBST( t, s ) //将新结点插入树t中 scanf ( “ %

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档