5二叉排序树的建立和查找

#include

using namespace std;

typedef int KeyType;

typedef struct tree//声明树的结构

{

struct tree *left; //存放左子树的指针

struct tree *right; //存放又子树的指针

KeyType key; //存放节点的内容

} BSTNode, * BSTree; //声明二叉树的链表

BSTree insertBST(BSTree tptr,KeyType key)// 在二叉排序树中插入结点

{ //若二叉排序树tptr中没有关键字为key的结点,则插入,否则直接返回

BSTree f,p=tptr; //p的初值指向根结点

} while(p) //查找插入位置,循环结束时,p是空指针,f指向待插入结点的双亲 { if(p->key==key) //树中已有key,无须插入 return tptr; f=p; //f保存当前查找的结点,即f是p的双亲 p=(key

key)?p->left:p->right; } p=(BSTree )malloc(sizeof(BSTNode)); //生成新结点 p->key=key; p->left=p->right=NULL; if(tptr==NULL) //原树为空,新插入的结点为新的根 tptr=p; else if(keykey) f->left=p; else f->right=p; return tptr;

BSTree createBST()//建立二叉树

{

BSTree t=NULL; //根结点 KeyType key; cin>>key; while(key!=0) { t=insertBST(t,key); cin>>key; } return t;

}

void inorder_btree(BSTree root)// 中序遍历打印二叉排序树

{

BSTree p=root; if(p!=NULL){ } inorder_btree(p->left ); coutkeyright );

}

int searchBST(BSTree t,KeyType key)//查找

{

if(t==NULL) return 0; if(key==t->key) return 1;

else

if(keykey)

return searchBST(t->left,key);

else if(key>t->key)

return searchBST(t->right,key);

else

return 0;

}

BSTree deleteBST(BSTree tptr,KeyType key)//删除

{

BSTree p,tmp,parent=NULL;

p=tptr;

while(p)

{

if(p->key==key)

break;

parent=p;

p=(key

key)?p->left:p->right;

}

if(!p) return NULL;

tmp=p;

if(!p->right&&!p->left) /*p的左右子树都为空*/

{

if(!parent) //要删根,须修改根指针

tptr=NULL;

else if(p==parent->right)

parent->right=NULL;

else

parent->left=NULL;

free(p);

}

else if(!p->right) //p的右子树为空,则重接p的左子树

{

p=p->left;

if(!parent) //要删根,须修改根指针

tptr=p;

else if(tmp==parent->left)

parent->left=p;

else

parent->right=p;

free(tmp);

}

else if(!p->left) //的左子树为空,则重接p的左子树

{

p=p->right;

if(!parent) //要删根,须修改根指针

tptr=p;

else if(tmp==parent->left)

parent->left=p;

else

parent->right=p;

free(tmp);

}

else if(p->right&&p->left) //p有左子树和右子树,用p的后继覆盖p然后删去后继 { //另有方法:用p的前驱覆盖p然后删去前驱||合并p的左右子树

parent=p; //由于用覆盖法删根,则不必特殊考虑删根

p=p->right;

while(p->left)

{

parent=p;

p=p->left;

}

tmp->key=p->key;

if(p==parent->left)

parent->left=NULL;

else

parent->right=NULL;

free(p);

}

return tptr;

}

int main()

{

KeyType key;

int flag,test;

char cmd; BSTree root; do { cout>cmd; flag++; }while(cmd!='a'&&cmd!='A'); if(cmd=='A'||cmd=='a') { cout

inorder_btree(root);

cout

cout

cout

**"

cout

**"

cout

switch(cmd)

{

case 's':

case 'S':

cout

cin>>key; test=searchBST(root,key); if(test==0) cout

break; case 'i': case 'I': cout>key; root=insertBST(root,key); //注意必须将值传回根 break; case 'd': case 'D': cout>key; root=deleteBST(root,key); //注意必须将值传回根 if(root==NULL) cout

} } }while(cmd!='q'&&cmd!='Q'); } }while(cmd!='b'&&cmd!='B'); return 0;


相关文章

  • [数据结构]课程教学大纲
  • <数据结构>课程教学大纲--2012版 一.课程基本信息 课程名称:数据结构 英文名称:Data Structure 课程编码: 11107C/11207C 课程类别:专业主干课 总学时: 64学时(含实验16学时) 总学分: 4 适用专业:计算机科学与技术/网络工程方向 先修课程:高级 ...

  • 数据结构习题集
  • 第一章 绪论 一.填空题 1. 数据是描述客观事物的数.字符以及所有能输入到计算机且能够被计算机程序加工处理的符号集合.____数据元素_____是数据的基本单位:____数据项_______是数据的最小单位.通常被计算机加工处理的数据不是孤立无关的,而是彼此之间存在着某种联系,将这种数据间的联系称 ...

  • 1利用二叉排序树的插入实现二叉排序树的创建
  • //1利用二叉排序树的插入实现二叉排序树的创建 //2 分别用递归和非递归的方法实现二叉排序树的查找 //3(选作)尝试实现二叉排序树的删除 #include #include #include typedef int ElemType; typedef struct node { ElemType ...

  • 数据结构,操作系统重要概念整理
  • 数据结构: 一.重点知识点 1. 了解算法的时间复杂度的概念,会求一个算法的时间复杂度: 2. 了解线性表的概念,掌握线性表的顺序表示与链式表示: 3. 掌握链表的增.删.查.改等基本操作: 4. 理解栈和队列的基本概念: 5. 掌握循环队列的判空等基本操作: 6. 掌握栈在括号匹配和递归中的应用: ...

  • 自考02142[数据结构导论]串讲笔记
  • 第一张概论 1.1 引言 两项基本任务:数据表示,数据处理 软件系统生存期:软件计划,需求分析,软件设计,软件编码,软件测试,软件维护 由一种逻辑结构和一组基本运算构成的整体是实际问题的一种数学模型,这种数学模型的建立,选择和实现是数据结构的核心问题. 机外表示------逻辑结构------存储结 ...

  • 数据结构总结
  • 数据结构总结 一. 绪论 数据:对客观实物的符号表示,在计算机科学中指所有能输入到计算机中并被计算机程序处理的符号的总称. 数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理. 数据项:是数据的不可分割的最小单位. 数据对象:性质相同的数据元素的集合,是数据的一个子集. 数据结构 ...

  • 数据结构教学大纲
  • 数据结构教学大纲 (56学时) 一.课程性质.适用专业及层次 本课程是我院计算机专业的一门综合性的专业基础课.主要介绍如何合理地组织数据.有效地存储和处理数据,正确地设计算法以及对算法的分析和评价.通过本课程的学习,使学生深透地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养基本的.良好 ...

  • 数据机构选择题
  • (1)在数据结构中,从逻辑上可以把数据结构分成( C ). A .动态结构和静态结构 B .紧凑结构和非紧凑结构 C .线性结构和非线性结构 D .内部结构和外部结构 (2)与数据元素本身的形式.内容.相对位置.个数无关的是数据的( C ). A .存储结构 B .存储实现 C .逻辑结构 D .运 ...

  • 实验教材编写模板说明 - 副本
  • 实验教材编写模板 一.本次编写实验教材目录(初稿) 第3章 WINDOWS操作系统(王新刚) 1. Windows 7基本操作 2. 管理文件和文件夹 3. 常用控件面板和附件组件的操作 4. 虚拟机的使用 二.实验项目编写框架 (1) 场景导入 (2) 任务目标:技能点.计算思维 (3) 任务分析 ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn