数据结构(Java)-第8章查找.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
50 30 80 20 90 85 40 35 88 32 例如: 二叉排序树 给定值 == 35 , 50 30 40 35 90 , 50 80 90 95 , 三、基于树的查找 class BinaryTreeNode { int data; //结点中的数据元素,以整型为例 BinaryTreeNode left; //指向左孩子的对象 BinaryTreeNode right; //指向右孩子的对象 } 二叉排序树的查找算法 采用二叉链表存储结构 三、基于树的查找 public class BinarySearch { public BinaryTreeNode binary_search(BinaryTreeNode root,int kx){ BinaryTreeNode p,f; p=root; f=p; while(p!=null){ if(kx==p.data) return p; //查找结束 else if(kxp.data){//在左子树中继续查找 f=p; p=p.left; }else{//在右子树中继续查找 f=p; p=p.right; } } return null; //查找失败 } } 三、基于树的查找 三、基于树的查找 3.二叉排序树的插入 插入过程:设待插入结点的关键字为kx,为将其插入,先要在二叉排序树中进行查找,若查找成功,按二叉排序树定义,待插入结点已存在,不用插入;查找失败时,才进行插入操作。 中序遍历二叉排序树可得到一个关键字的有序序列 10 10 18 10 18 3 10 18 3 8 10 18 3 8 12 10 18 3 8 12 2 10 18 3 8 12 2 7 【例】记录的关键字序列为: 10, 18, 3, 8, 12, 2, 7 ,则构造一棵二叉排序树的过程为: 三、基于树的查找 首先在BinaryTreeNode类中增加构造函数: public BinaryTreeNode(int data,BinaryTreeNode left,BinaryTreeNode right){ this.data=data; this.left=left; this.right=right; } 然后创建新类BinaryInsert,并定义BinaryInsert方法,算法如下: /* *程序功能:在根结点为root的二叉排序树中插入关键字值等于kx的结点,插入成功返回*true,失败返回false。 */ public class BinaryInsert { public boolean binary_insert(BinaryTreeNode root,int kx){ 二叉排序树的插入算法 三、基于树的查找 if(root==null){//建立根结点 root=new BinaryTreeNode(kx,null,null); return true; } return insert(root,kx);//插入kx到以root为根的二叉排序树中 } //将kx插入到以p为根的子树中,递归算法 private boolean insert(BinaryTreeNode p,int kx){ if(kx==p.data) return false;//不插入关键字重复的结点 else if(kxp.data) if(p.left==null){//建立叶子结点作为p的左孩子 p.left=new BinaryTreeNode(kx,null,null); return true; } else //将value插入到p的左子树中 return insert(p.left,kx); 三、基于树的查找 else if(p.right==null){//建立叶子结点作为p的右孩子 p.right=new BinaryTreeNode(kx,null,null); return true; } else //将value插入到p的右子树中 return insert(p.right,kx); } } 三、基于树的查找 三、基于树的查找 4.二叉排序树的删除 删除过程:设待删结点为p(设p为指向待删除结点的对象),其双亲结点为parent,删除过程分以下三种情况进行讨论: 。 (1)被删除的结点是叶子; (2)被删除的结点只有左子树,或者只有右子树; (3)被删除的结点既有

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档