查找树ADT--二叉查找树
来源:互联网 发布:java和c 的相似程度 编辑:程序博客网 时间:2024/06/10 06:30
/*Tree.h*/#ifndef _Tree_Hstruct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef int ElementType;SearchTree MakeEmpty(SearchTree T);Position Find(ElementType X, SearchTree T);Position FindMin(SearchTree T);Position FindMax(SearchTree T);SearchTree Insert(ElementType X, SearchTree T);SearchTree Delete(ElementType X, SearchTree T);ElementType Retrieve(Position P);#endif // !_Tree_H
/*Tree.cpp*/#include<stdio.h>#include<stdlib.h>#include"Tree.h"struct TreeNode{ ElementType Element; SearchTree Left; SearchTree Right;};SearchTree MakeEmpty(SearchTree T){ if (T != NULL) { MakeEmpty(T->Left); MakeEmpty(T->Right); free(T); } return NULL;}Position Find(ElementType X, SearchTree T){ if (T == NULL) return NULL; if (X < T->Element) return Find(X, T->Left); else if (X > T->Element) return Find(X, T->Right); else return T;}Position FindMin(SearchTree T){ if (T == NULL) return NULL; else if (T->Left == NULL) return T; else return FindMin(T->Left);}Position FindMax(SearchTree T){ if (T != NULL) while (T->Right != NULL) T = T->Right; return T;}SearchTree Insert(ElementType X, SearchTree T){ if (T == NULL) { /*Creat and return a one-node tree*/ T = (TreeNode*)malloc(sizeof(struct TreeNode)); if (T = NULL) printf("Out of space!"); else { T->Element = X; T->Left = T->Right = NULL; } } else if (X < T->Element) T->Left = Insert(X, T->Left); else if (X > T->Element) T->Right = Insert(X, T->Right); /*else X is in the tree already;we'll do nothing*/ return T;}SearchTree Delete(ElementType X, SearchTree T){ Position TmpCell; if (T = NULL) printf("Element not found!"); else if (X > T->Element)/*Go left*/ T->Left = Delete(X, T->Left); else if (X < T->Element)/*Go right*/ T->Right = Delete(X, T->Right); /*Found element to be deleted*/ else if (T->Left&&T->Right)/*Two children*/ { /*Repalce with smallest in right subtree*/ TmpCell = FindMin(T->Right); T->Element = TmpCell->Element; T->Right = Delete(T->Element, T->Right); } else /*One or zero children*/ { TmpCell = T; if (T->Left = NULL)/*Aslo handles 0 child*/ T = T->Right; else if (T->Right = NULL) T = T->Left; free(TmpCell); } return T;}int main(){ SearchTree T{} ; Insert(1, T); Insert(2, T); Insert(3, T); Insert(4, T); Insert(5, T); Insert(6, T); Insert(8, T); printf("%d", FindMin(T)->Element); printf("%d", FindMax(T)->Element); printf("%d", Find(4, T)->Element); Delete(4, T); Find(4, T); MakeEmpty(T); return 0;}
阅读全文
0 0
- 二叉查找树 ADT
- ADT 二叉查找树
- ADT 二叉查找树
- 查找树ADT-二叉查找树
- 查找树ADT之二叉查找树
- 查找树ADT--二叉查找树
- 查找树ADT--二叉查找树
- 二叉查找树 ADT实现
- JAVA之查找二叉树ADT
- 查找--二叉查找树
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 二叉查找树
- 数据结构学习——二叉查找树ADT(程序化)
- 【查找结构】二叉查找树
- 查找之二叉树查找
- 查找之二叉树查找
- 查找:二叉查找树总结
- ADT(二叉查找树)和AVL(平衡二叉树)总结
- 查找算法 顺序查找 二分查找 二叉树查找 算法
- element-UI表格中拿到每一行的index----scope
- Spring:bean的使用
- iOS-APP 签名原理
- 欢迎使用CSDN-markdown编辑器
- 170821 WarGames-Natas(26)
- 查找树ADT--二叉查找树
- 工控行业的光电传感器特点
- KMP算法(浅显易懂)
- JAVA开发的23种设计模式之 — 迭代器模式
- Java中的set去重复(基础类型,与对象)转载自http://blog.csdn.net/miqi770/article/details/8998517
- 命令行基础
- git
- 关于手动关闭数据库连接和连接池关系的一点小困惑
- NFS挂载时出现"access denied by server while mounting"的解决方法