网站301做排名网站 医院信息化建设
news/
2025/10/9 2:46:00/
文章来源:
网站301做排名,网站 医院信息化建设,高端网站的建设,网络广告是什么意思本文实例为大家分享了C语言二叉排序(搜索)树实例代码#xff0c;供大家参考#xff0c;具体内容如下/**1.实现了递归 非递归插入(创建)二叉排序(搜索)树#xff1b;分别对应Insert_BinSNode(TBinSNode* T,int k),NonRecursion_Insert_BinSNode(TBinSNode* T,int k);2.实现了…本文实例为大家分享了C语言二叉排序(搜索)树实例代码供大家参考具体内容如下/**1.实现了递归 非递归插入(创建)二叉排序(搜索)树分别对应Insert_BinSNode(TBinSNode* T,int k),NonRecursion_Insert_BinSNode(TBinSNode* T,int k);2.实现了递归 非递归查找 二叉排序(搜索)树 分别对应Find_BinSNode(TBinSNode *T,int s),NonRecursion_Find_BinSNode(TBinSNode *T,int s);3. 实现了非递归删除 二叉排序(搜索)树分别对应Delete_BinSNode()4. 实现了递归先序、中序、后序遍历二叉排序(搜索)树分别对应Pre_Print_BinSNode(TBinSNode T),In_Print_BinSNode(TBinSNode T),Post_Print_BinSNode(TBinSNode T);*/#include#includetypedef struct BinSTreeNode{int num;struct BinSTreeNode *lchild,*rchild;}BinSNode,*TBinSNode;int Empty_Tree(TBinSNode T){if(!T){return 1;}else{return 0;}}/*---------------------非递归方法 二叉排序树的删除-----------------*/void Delete_BinSNode(TBinSNode *T,int del){TBinSNode cur,pre,lt,rblast;cur*T;preNULL;//如果二叉排序树为空if(Empty_Tree(cur)){printf(Sorry,Tree is none);return;}//如果二叉排序树不为空先找到即将删除的元素del.这里再次实现一遍查找当然也可以修改一下Find类的函数while(cur cur-num!del){if(delcur-num){precur;curcur-rchild;}else{precur;curcur-lchild;}}if(!cur){printf(Sorry,you want to delete the node,which is non-existent);return;}if(cur-numdel){printf(find the delete node,wait a minute.......\n);}//如果找到待删除的结点立刻判断该结点有无左子树//情况一待删除结点无左子树if(!cur-lchild){if(preNULL){cur*T;*T(*T)-rchild;free(cur);return;}if(pre-lchild pre-lchild-numdel){pre-lchildcur-rchild;free(cur);return;}if(pre-rchild pre-rchild-numdel){pre-rchildcur-rchild;free(cur);return;}}//情况二待删除的结点有左子树。if(cur-lchild){ltcur-lchild;//情况2.1该左子树无右子树if(!lt-rchild){if(pre-lchild pre-lchild-numdel){pre-lchildlt;free(cur);return;}if(pre-rchild pre-rchild-numdel){pre-rchildlt;free(cur);return;}}//情况2.2:该左子树有右子树if(lt-rchild){while(lt-rchild){rblastlt; //该左子树中最大的结点的前一个结点.ltlt-rchild;}cur-numlt-num;rblast-rchildlt-lchild;free(lt);return;}}}/*--------------------递归方法 查找 二叉排序树-------------------*/void Find_BinSNode(TBinSNode T,int s){if(sT-num){printf(%d\n,T-num);return;}if(sT-num){Find_BinSNode(T-rchild,s);}else{Find_BinSNode(T-lchild,s);}}/*-------------------非递归方法 查找二叉排序树--------------------*/void NonRecursion_Find_BinSNode(TBinSNode T,int s){if(Empty_Tree(T)){printf(Tree is none);return;}while(T s!T-num ){if(sT-num){TT-rchild;}else{TT-lchild;}}if(!T){printf(Sorry,Not Find!);exit(0);}if(sT-num){printf(%d\n,T-num);}}/*-----------------递归方法 创建/插入 二叉排序树------------------*/void Insert_BinSNode(TBinSNode *T,int k){// int n;TBinSNode node;// scanf(%d,n);if(Empty_Tree(*T)){*T(TBinSNode)malloc(sizeof(BinSNode));(*T)-numk;(*T)-lchild(*T)-rchildNULL;return;}else{if(k(*T)-num){Insert_BinSNode((*T)-rchild,k);}else{Insert_BinSNode((*T)-lchild,k);}}}/*----------------------先序遍历二叉排序树----------------------------------*/void Pre_Print_BinSNode(TBinSNode T){if(T){printf(%d ,T-num);Pre_Print_BinSNode(T-lchild);Pre_Print_BinSNode(T-rchild);}}/*-----------------------中序遍历二叉排序树-----------------------------------*/void In_Print_BinSNode(TBinSNode T){if(T){In_Print_BinSNode(T-lchild);printf(%d ,T-num);In_Print_BinSNode(T-rchild);}}/*-----------------------后序遍历二叉排序树-----------------------------------*/void Post_Print_BinSNode(TBinSNode T){if(T){Post_Print_BinSNode(T-lchild);Post_Print_BinSNode(T-rchild);printf(%d ,T-num);}}/*---------------------非递归 创建/插入 二叉排序树---------------------------*/void NonRecursion_Insert_BinSNode(TBinSNode *T,int k){//如果为空的二叉排序树TBinSNode cur,p,t;t*T;if(!*T){*T(TBinSNode)malloc(sizeof(BinSNode));(*T)-numk;(*T)-lchild(*T)-rchildNULL;return;}else{ //二叉排序树不为空。while(t){if(kt-num){curt;tt-rchild;}else{curt;tt-lchild;}}p(TBinSNode)malloc(sizeof(BinSNode));p-numk;p-lchildp-rchildNULL;if(kcur-num){cur-rchildp;}if(knum){cur-lchildp;}}}int main(void){TBinSNode TNULL;int k,s,del;//创建的 查找的 删除的while(scanf(%d,k) k){// Insert_BinSNode(T,k);NonRecursion_Insert_BinSNode(T,k);}// scanf(%d,s);// Find_BinSNode(T,s);// NonRecursion_Find_BinSNode(T,s);Pre_Print_BinSNode(T);scanf(%d,del);Delete_BinSNode(T,del);Pre_Print_BinSNode(T);return 0;}以上就是本文的全部内容希望对大家的学习有所帮助也希望大家多多支持编程小技巧。总结以上是编程之家为你收集整理的C语言二叉排序(搜索)树实例全部内容希望文章能够帮你解决C语言二叉排序(搜索)树实例所遇到的程序开发问题。如果觉得编程之家网站内容还不错欢迎将编程之家网站推荐给程序员好友。本图文内容来源于网友网络收集整理提供作为学习参考使用版权属于原作者。小编个人微信号 jb51ccc喜欢与人分享编程技术与工作经验欢迎加入编程之家官方交流群
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/932151.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!