二叉查找树
来源:互联网 发布:手机淘宝评价管理 编辑:程序博客网 时间:2024/06/16 20:23
使得二叉树成为二叉查找树的关键就是令树中的每个节点的左子树的关键值小于X的关键值,它的右子树中所有的关键字大于X的关键字。
本文主要介绍二叉查找树的实现和基本的插入和删除操作
头文件声明如下
#ifndef ADT_H_#define ADT_H_struct ADT;typedef struct ADT *ADtree;typedef struct ADT *Position;//查找函数,查找某个元素的所在节点的地址Position Find(ADtree t,int X);//查找最大值,最小值函数,查找最大值和最小值所在节点的地址Position Findmax(ADtree t);Position Findmin(ADtree t);//插入函数,插入一个节点ADtree Insert(ADtree t,int X);//删除函数,删除一个节点ADtree Delete(ADtree t,int X);#endif // ADT_H_
二叉查找树的定义以及基本操作的定义
#include <stdio.h>#include <stdlib.h>#include "main.h"struct ADT{ int element; Position left; Position right;};//查找函数,查找某个元素的所在节点的地址Position Find(ADtree t,int X){ if(t==NULL) return NULL; else { Position tem=t; while(tem!=NULL) { if(X<tem->element) tem=tem->left; if(X>tem->element) tem=tem->right; if(X==tem->element) return tem; } if(tem==NULL) return NULL; }}//查找最大值,最小值函数,查找最大值和最小值所在节点的地址Position Findmax(ADtree t){ if(t==NULL) return NULL; if(t->right==NULL) return t; else return Findmax(t->right);}Position Findmin(ADtree t){ if(t==NULL) return NULL; if(t->left==NULL) return t; else return Findmin(t->left);}//插入函数,插入一个节点ADtree Insert(ADtree t,int X){ if(t==NULL) { t=malloc(sizeof(struct ADT)); t->left=NULL; t->right=NULL; t->element=X; printf("insert success\n"); } else { Position p_tem=t; if(X>p_tem->element) { t->right=Insert(p_tem->right,X); } if(X<p_tem->element) { t->left=Insert(p_tem->left,X); } } return t;}//遍历树void print(Position p,int dep){ if(p!=NULL) { int i=0; for(;i<dep;i++) printf(" "); printf("%d\n",p->element); }}void traverse(ADtree t,int d){ if(t!=NULL) { print(t,d); traverse(t->left,d+1); traverse(t->right,d+1); }}//删除函数,删除一个节点ADtree Delete(ADtree t,int X){ if(t==NULL) return t; else { if(X>t->element) t->right=Delete(t->right,X); if(X<t->element) t->left=Delete(t->left,X); if(X==t->element) { if(t->left!=NULL&&t->right!=NULL) { Position p_tem=Findmin(t->right); t->element=p_tem->element; t->right=Delete(t->right,p_tem->element); } else { Position p=t; if(p->left==NULL) { t=t->right; free(p); } else if(p->right==NULL) { t=t->left; free(p); } } } return t; }}
0 0
- 查找--二叉查找树
- 二叉树、二叉查找树
- 二叉树 & 二叉查找树
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- 二叉树查找树...
- 二叉树查找树
- 查找--遍历二叉树
- 二叉查找树
- 二叉查找树实现
- 二叉查找树
- 动态二叉查找树
- 最优二叉查找树
- 二叉查找树
- 二叉查找树
- 平衡二叉查找树
- CodeForces 514D R2D2 and Droid Army
- 编程之美3.3——类似——两个字符串的最长公共子序列(LCS)
- 【树形dp】Codeforces 238C World Eater Brothers
- zoj 3601 Unrequited Love(STL,灵活题)
- Python学习笔记
- 二叉查找树
- mongoose 实现DBRef查找所有子类信息
- 学习使用Git和远程代码库,已亲自试用,非常好
- 走进微信的神奇世界--数据的发送和接收
- 数字图像处理的研究方法
- MFC 定时器OnTimer的使用|string转为LPCTSTR的乱码问题
- Android Activity的生命周期
- 【线段树】Codeforces 437B The Child and Set
- IOS自动布局的一些使用