二叉查找树相关操作实现
来源:互联网 发布:女生减肥知乎 编辑:程序博客网 时间:2024/05/21 10:54
二叉查找树相关操作实现
#include<cstdio>#include<cstdlib>typedef struct BTNode{int data;struct BTNode *lchild,*rchild;}BTNode;typedef struct BTree{BTNode *root;}BTree;int Search(BTNode* T,int key,BTNode *F,BTNode** P)//指针P指向查找路径上最后一个节点{if(!T){*P=F;return 0;//查找不成功}else if(key==T->data){*P=T;return 1;//查找成功}else if(key<T->data)return Search(T->lchild,key,T,P);elsereturn Search(T->rchild,key,T,P);}int Insert(BTNode **T,int key){BTNode *P,*S;if(!Search(*T,key,NULL,&P)){S=(BTNode *)malloc(sizeof(BTNode));S->data=key;S->lchild=S->rchild=NULL;if(!P)*T=S;//为新的根节点else if(key<P->data)P->lchild=S;elseP->rchild=S;return 1;}elsereturn 0;}void CTree(BTNode **T,int A[],int n){int i;for(i=0;i<n;i++)Insert(T,A[i]);}int DeleNode(BTNode **T);int Delete(BTNode **T,int key){if(!*T)return 0;else{if(key==(*T)->data)return DeleNode(T);else if(key<(*T)->data)return Delete(&(*T)->lchild,key);elsereturn Delete(&(*T)->rchild,key);}}/*二叉选择树节点删除的思想:1,若删除的为叶子节点,则对树的结构无影响2,若删除节点只有左子树或者右子树,则将左子树或者右子树整体上移即可3,若删除节点P既有左子树又有右子树,则需要找到待删除节点的直接前驱或者直接后继S来替换P,然后删除S*/int DeleNode(BTNode **T){BTNode *Q,*S;if((*T)->rchild==NULL)//只有左子树{Q=(*T);*T=(*T)->lchild;free(Q);}else if((*T)->lchild==NULL)//只有右子树{Q=*T;*T=(*T)->rchild;free(Q);}else//左右子树都有{Q=*T;S=(*T)->lchild;while(S->rchild){Q=S;S=S->rchild;}(*T)->data=S->data;if(Q!=(*T))Q->rchild=S->lchild;//重接Q的右子树elseQ->lchild=S->lchild;//重接Q的左子树free(S);}return 1;}void OutPut(BTNode *T){if(T){OutPut(T->lchild);printf("%4d",T->data);OutPut(T->rchild);}}int main(int argc,char *argv[]){int Array[10]={62,88,57,48,35,73,51,99,37,93};BTree T;CTree(&(T.root),Array,10);OutPut(T.root);Delete(&(T.root),73); OutPut(T.root);return 0;}
1 0
- 二叉查找树相关操作实现
- java实现二叉查找树以及相关操作
- 数据结构:二叉查找树的相关操作
- 问题六十四:怎么用C++实现二叉查找树(binary search tree)及其相关操作
- 二叉查找树相关
- 二叉查找树基本操作实现
- 二叉查找树(Binary Search Tree)相关操作
- 数据结构与算法简记:二叉查找树相关操作
- 二叉树的相关操作(2)--各类分支查找
- C++实现二叉树相关操作
- Java实现二叉树的相关操作
- Python 实现二叉树相关操作
- python实现二叉树及相关操作
- 二叉查找树相关算法实现(算法导论12章)
- 二叉查找树相关判断
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 【学习】java、memcached、windows的配置及使用
- C#操作xml工具类
- poj1523求割点以及割后连通分量数tarjan算法应用
- 【Usaco Jan08 Gold】电话网络 --树型dp
- Struts2-OGNL表达式
- 二叉查找树相关操作实现
- c++模板函数声明定义分离编译错误详解
- HDU 4763 Theme Section(KMP)
- 64位的win7 配置android开发环境
- hdu 3652 B-number(数位DP)
- 小技巧
- Theano学习五----Theano RandomStreams
- O_board-2-运行第一个裸机程序
- C#数据库操作类