数据结构学习——二叉查找树ADT(程序化)
来源:互联网 发布:linux限制ip访问次数 编辑:程序博客网 时间:2024/06/09 21:11
参考资料:《数据结构与算法分析——C语言描述》4.3一节
#include<stdio.h>#include<stdlib.h>#define N 10typedef struct BinTreeNode{ int data; struct BinTreeNode *left; struct BinTreeNode *right;}BinTreeNode,*BinTree;BinTree insert(BinTree T,int data);//二叉树节点的添加void PrintTree(BinTree T,void (*p)(BinTree T));//打印操作void PrintTreeNode(BinTree T);//打印一个节点BinTree Delete(BinTree T,int data);//删除某个节点BinTree FindMin(BinTree T);//查找最小节点BinTree FindMax(BinTree T);//查找最大节点int FindMaxSubMin(BinTree T);//最大节点与最小节点的差值int main(){ int i=0,n=0; int data[N]= {10,23,11,98,111,87,34,11,154,4}; BinTreeNode *root=NULL; BinTree p; for(i=0;i<N;i++) { root=insert(root,data[i]); } PrintTree(root,PrintTreeNode); n=FindMaxSubMin(root); printf("%d\n",n); p=FindMin(root); PrintTreeNode(p); p=FindMax(root); PrintTreeNode(p); printf("\n"); root=Delete(root,154); printf("\n"); PrintTree(root,PrintTreeNode); printf("\n"); n=FindMaxSubMin(root); printf("%d\n",n); p=FindMin(root); PrintTreeNode(p); p=FindMax(root); PrintTreeNode(p); root=Delete(root,1154); free(root); free(p); return 0;}BinTree insert(BinTree T,int data){ if(T==NULL) { T=malloc(sizeof(BinTreeNode)); if(T==NULL) printf("Out of space!\n"); else { T->data=data; T->left=NULL; T->right=NULL; } } else { if(data<T->data) T->left=insert(T->left,data); else T->right=insert(T->right,data); } return T;}void PrintTreeNode(BinTree T){ printf("%d\t",T->data);}//中序遍历void PrintTree(BinTree T,void (*p)(BinTree T)){ if(T!=NULL) { PrintTree(T->left,p);//打印左子树 p(T);//打印节点 PrintTree(T->right,p);//打印右子树 }}BinTree Delete(BinTree T,int data){ BinTree temp; if(T==NULL) printf("\n%d not found.\n",data); else { if(data<T->data) T->left=Delete(T->left,data); else { if(data>T->data) T->right=Delete(T->right,data); else { if( T->left && T->right)//two children { temp=FindMin(T->right); T->data=temp->data; T->right=Delete(T->right,T->data); } else//one or zero child { temp=T; if(T->left==NULL) T=T->right; else { if(T->right==NULL) T=T->left; } free(temp); } } } } return T;}BinTree FindMin(BinTree T){ if(T==NULL) return NULL; else if(T->left==NULL) return T; else return FindMin(T->left);}BinTree FindMax(BinTree T){ if(T==NULL) return NULL; else if(T->right==NULL) return T; else return FindMax(T->right);}int FindMaxSubMin(BinTree T){ int Max,Min; BinTree p; p=T; if(T==NULL) return 0; while(T->left!=NULL) T=T->left; Min=T->data; while(p->right) p=p->right; Max=p->data; return (Max-Min);}
0 0
- 数据结构学习——二叉查找树ADT(程序化)
- 数据结构学习——二叉堆ADT(程序化)
- 数据结构学习——单链表ADT(程序化)
- 数据结构学习——散列表ADT(程序化)
- 数据结构——二叉(查找)树
- 二叉查找树 ADT
- ADT 二叉查找树
- ADT 二叉查找树
- 数据结构(scheme) -- 抽象数据类型(ADT) -- 二叉查找树
- 数据结构之查找(五)——二叉查找树
- 数据结构学习——栈的链表实现(程序化)
- 二叉查找树 ADT实现
- 数据结构——二叉查找树
- 基本数据结构——二叉查找树
- 数据结构专题——二叉查找树
- 数据结构(Java)——二叉查找树
- 数据结构——二叉查找树
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- ubuntu去掉侧边栏和桌面的固定图标
- hadoop2.6.0 nodemanager启动后过一段时间就自动关闭
- 举例分析Linux动态库和静态库
- 【蓝桥杯题目分析】2014年第五届——第三题:李白打酒
- 欢迎使用CSDN-markdown编辑器
- 数据结构学习——二叉查找树ADT(程序化)
- when I was upset
- 看似小事,却极易写错
- [Qt]界面效果setWindowFlags()
- hdu 1029
- 最小树-克鲁斯卡尔
- Web挖掘技术可实现应用目标
- SQLServer 数据加密解密:在多个服务器实例中创建相同对称密钥(三)
- 《数据结构编程实验》 4.2.1Adding Reversed Numbers