数据结构:二叉查找树的相关操作
来源:互联网 发布:domori巧克力知乎 编辑:程序博客网 时间:2024/05/16 16:18
二叉查找树的相关操作
二叉查找树是专门用于二叉树的查找,一般的二叉树查找都是通过遍历来实现,二叉查找树能有效提高查找效率。
- 构造一个空的二叉查找树
- 二叉查找树T存在,销毁树T
- 在二叉查找树中查找值为e.key的结点
- 往二叉查找树中插入值为e.key的结点
- 删除二叉查找树中值为key的结点
代码实现
// Binary_Search_Tree#include<stdio.h>#include<stdlib.h> #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1typedef int Status;typedef struct { int key; } TElemType;typedef struct BSTNode { TElemType data; struct BSTNode *lchild, *rchild;} BSTNode, *BSTree;// 构造一个空的二叉查找树 Status InitBST (BSTree &T) { T = NULL; }// 销毁树 Status DestroyBST(BSTree &T) { if(T->lchild != NULL) DestroyBST(T->lchild); if(T->rchild != NULL) DestroyBST(T->rchild); T = NULL; }// 若二叉查找树 T 中存在值为 key 的结点,则返回该结点指针,否则返回 NULLBSTree SearchBST(BSTree T, int key) { if(NULL == T) return NULL; // 查找失败 if(T->data.key == key) return T; if(T->data.key > key) { return SearchBST(T->lchild, key); } return SearchBST(T->rchild, key);}// 若二叉查找树 T 中不存在值为 e.key 的结点,则插入到 T Status InsertBST(BSTree &T,TElemType e) { if(NULL == T) { BSTNode *s; s = (BSTNode*) malloc (sizeof(BSTNode)); if(NULL == s) return OVERFLOW; s->data = e; s->lchild = NULL; s->rchild = NULL; T = s; return TRUE; } if(e.key < T->data.key) return InsertBST(T->lchild,e); if(e.key > T->data.key) return InsertBST(T->rchild,e); return FALSE;} // 删除结点操作 void DeleteNode(BSTree &p) { BSTNode *q,*s; q = p; if(NULL == p->rchild) { p = p->lchild; free(q); } else if(NULL == p->lchild) { p = p->rchild; free(q); } else { s = p->lchild; while (s->rchild != NULL) { q = s; s = s->rchild; } p->data = s->data; if(q == p) q->lchild = s->lchild; else q->rchild = s->lchild; free(s); }}// 若二叉查找树 T 中存在值为 key 的结点,则删除 Status DeleteBST(BSTree &T,int key) { if(NULL == T) return FALSE; if(key == T->data.key) { DeleteNode(T); return TRUE; } else if(key < T->data.key) return DeleteBST(T->lchild,key); return DeleteBST(T->rchild,key);}// 输出树 void puttree(BSTree &t){ if(NULL == t) return ; else{ puttree(t->lchild); printf("%d ",t->data); puttree(t->rchild); }} int main() { TElemType E; int i; int key_1, key_2, key_3; int a[10]; BSTree t, temp_1, temp_2; Status temp_3; printf("enter array a[10](integer):\n"); for(i = 0;i < 10;i++) { //构造数组a[10] scanf("%d",&a[i]); } InitBST(t); // 构造一个空的二叉查找树 for(i = 0;i<10;i++) { E.key = a[i]; InsertBST(t,E); // 插入值为 E.key的结点 } printf("Tree is made up from array a[10]:\n"); puttree(t); // 输出树 printf("\n"); printf("enter key_1(for searching), key_2(for searching), key_3(for deleting):\n"); scanf("%d %d %d",&key_1, &key_2, &key_3); temp_1 = SearchBST(t,key_1); if(temp_1) { // 查找是否有存在结点值为key_1 printf("%d\n", temp_1->data.key); } else { printf("%d can't be found\n",key_1); } temp_2 = SearchBST(t,key_2); if(temp_2) { // 查找是否有存在结点值为key_2 printf("%d\n", temp_2->data.key); } else { printf("%d can't be found\n",key_2); } temp_3 = DeleteBST(t,key_3); if(temp_3 == TRUE) { //删除值为key_3的结点 printf("%d has been delete\n", key_3); } else { printf("%d can't be found\n",key_3); }}
1 0
- 数据结构:二叉查找树的相关操作
- 数据结构与算法简记:二叉查找树相关操作
- 数据结构 二叉搜索树的相关操作
- 【数据结构】搜索二叉树的相关操作
- 数据结构中二叉树的相关操作
- 【数据结构】二叉树相关操作
- 二叉树的相关操作(2)--各类分支查找
- 数据结构--二叉树的创建和相关操作
- 二叉查找树相关操作实现
- 二叉查找树的操作
- 二叉查找树的操作
- 查找二叉树的操作
- 二叉查找树的操作
- 数据结构试验报告-查找相关操作
- 数据结构与算法分析--二叉排序树(二叉查找树,二叉搜索树)的查找、插入和删除操作
- 数据结构与算法学习之二叉树及二叉树的相关操作
- 数据结构:二叉查找树
- 数据结构--二叉查找树
- 类名.class 类名.this
- HDUoj 2199 Can you solve this equation?(二分搜索)
- Repeated Substring Pattern
- TEC1401.Report开发技术总结 - 第六章 使用BI Publisher开发报表-创建XML数据源(1/5)
- Hession与Webservice的区别
- 数据结构:二叉查找树的相关操作
- JavaScript 运行机制详解:再谈Event Loop
- [leetcode][83]Remove Duplicates from Sorted List
- [leetcode][67] Add Binary
- Binary Tree Right Side View
- 学习的文档位置
- TEC1401.Report开发技术总结 - 第七章 使用BI Publisher开发报表-创建一个简单的RTF模板(2/5)
- TEC1401.Report开发技术总结 - 第八章 使用BI Publisher开发报表-在EBS应用中部署BIP报表(3/5)
- Leetcode 99. Recover Binary Search Tree (Hard) (cpp)