二叉排序树
来源:互联网 发布:怎样学好高中政治知乎 编辑:程序博客网 时间:2024/06/01 08:07
#include<stdio.h>#include<stdlib.h>typedef int type;typedef struct node{ type key; struct node *lchild,*rchild;}bsnode;typedef bsnode *bstree;//非递归查找x的位置,通过二级指针返回其父亲节点位置和其位置void bssearch(bstree t,type x,bstree *f,bstree*p){ *f=NULL; *p=t; while(*p) { if(x==(*p)->key) return ; *f=*p; *p=(x<(*p)->key)?(*p)->lchild:(*p)->rchild; } return ;}//递归查找x的位置bstree Bssearch(bstree t ,type x){ if(t==NULL||x==t->key) return t; if(x<t->key) return Bssearch(t->lchild,x); else return Bssearch(t->rchild,x);}//树中插入一个值为x的节点void insert(bstree *t,type x){ bstree f=NULL,p;//f为插入位置的双亲节点 p=*t; while(p) { if(p->key==x)//已存在该值,结束 return ; f=p; if(x<p->key) p=p->lchild; else p=p->rchild; } p=(bstree)malloc(sizeof(bsnode)); p->key=x; p->lchild=p->rchild=NULL; if(*t==NULL)//树为空树,新插入的节点为根节点 *t=p; else//插入到父节点相应位置 { if(x<f->key) f->lchild=p; else f->rchild=p; }}//创建一颗树bstree creatbstree(){ bstree t=NULL; type x; while(scanf("%d",&x)!=EOF,x>0) insert(&t,x); return t;}bstree DelBstree(bstree t,type x){ bstree p,q,child; //查找到该点的位置,和双亲位置 bssearch(t,x,&p,&q); if(q)//如果查找到 { if(q->lchild==NULL&&q->rchild==NULL)//叶子节点 { if(p) { if(p->lchild==q)//是双亲的左儿子树 p->lchild=NULL; else p->rchild=NULL;//双亲的右儿子树 } else t=NULL;//删除的是根节点 free(q); } else if(q->rchild==NULL)//只有左儿子树 { if(p)//存在双亲,将他的左儿子树代替他的位置 { if(p->lchild==q)//他是他双亲的左儿子树 p->lchild=q->lchild;//右儿子树 else p->rchild=q->lchild; } else t=q->lchild;//被删除的是根节点 free(q); } else if(q->lchild==NULL)//只有右儿子树(类似) { if(p) { if(p->lchild==q) p->lchild==q->rchild; else p->rchild=q->rchild; } else t=q->rchild; free(q); } else//既有左子树,又有右子树 { //将他的右儿子代替他的位置,他的左儿子放在有儿子树中序下首位 child=p->rchild; while(child->lchild) child=child->lchild; child->lchild=q->lchild;//找到右子树中序下首点 if(p) { if(p->lchild==q)//他是他双亲的左儿子 p->lchild=q->rchild; else p->rchild=q->rchild; } else t=q->rchild;//删除的是根节点 free(q); } } return t;}
0 0
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- leetcode_50_Pow(x, n)
- sqlite3notfound的解决办法
- liferay6.2 linux环境ext删除与重部署
- 约定优于配置
- 极光推送开发(一)
- 二叉排序树
- 欢迎使用CSDN-markdown编辑器
- 并行程序设计导论 第一章习题
- 安卓工具类------->ToolFor9Ge
- Docker容器内不能联网的6种解决方案
- 理解Handler、Looper、MessageQueue、Thread关系?二
- POJ 2492 A Bug's Life(并差集应用)
- Oracle下lag和lead分析函数
- Custom Class Loading in Dalvik