
C语言 二叉排序树
发布日期:2021-05-08 03:49:00
浏览次数:24
分类:精选文章
本文共 1593 字,大约阅读时间需要 5 分钟。
二叉排序树,又称二叉查找树。它或是一颗空树,或者是具有以下性质的二叉树。
- 若它的左子树不空,则左子树上所有节点的值均小于它的根结构值;
- 若它的右子树不空,则右子树上所有节点的值均小于它的根结构值;
- 它的左右子树分别为二叉排序树。
#includetypedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;//递归查找二叉排序树T中是否存在key//指针f指向T的双亲,其初始值为NULL//若查找成功,则指针p指向该数据元素节点,并返回RTUE//否则指针p指向查找路径上访问的最后一个节点并返回FALSEint Search(BiTree T,int key,BiTree f,BiTree *p){ if(!T) { *p = f; return -1; } else if(T->data == key) { *p = T; return 0; } else if(T->data > key) { return Search(T->lchild,key,T,p); } else { return Search(T->rchild,key,T,p); }}int Insert(BiTree *T,int key){ BiTree p,s; if(!Search(*T,key,NULL,&p)) { s = (BiTree)malloc(sizeof(BiTNode)); s->data = key; s->lchild = s->rchild = key; if(!p) *T =s; //insert new root node else if (key < p->data) p->lchild = s; else p->rchild = s; } else return -1;}int Delete(BiTree *p){ BiTree q,s; if((*p)->rchild == NULL)/*右子树为空则只需重接它的左子树*/ { q = *p; *p = *p->lchild; free(q); } else if((*p)->lchild == NULL)/*重接右子树*/ { q = *p; *p = *p->rchild; free(q); } else/*左右子树都不为空*/ { q = *p; s = (*p)->rchild; while(s->rchild)/*转左,然后向右找到尽头(待删除节点的前驱)*/ { q=s; s = s->rchild; } (*p)->data = s->data;/*s指向被删除节点的直接前驱*/ if(q != *(p)) q->rchild = s->lchild;/*重接q的右子树*/ else q->lchild = s->lchild;/*重接q的左子树*/ free(s); } return 1;}/* 删除分为三种情况分析1,叶子节点2,仅有左或者右子树的节点3,左右子树都有的节点我们用递归的方法查找key */int DeleteBST(BiTree *T,int key){ if(!*T) return -1; else { if(key == (*T)->data) return Delete(T); else if(key<(*T)->data) return DeleteBST(&(*T)->lchild,key); else return DeleteBST(&(*T)->rchild,key); }}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月14日 21时32分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
统计字符数
2021-05-07
JS数据类型的判断
2021-05-07
实现一个简易Vue(三)Compiler
2021-05-07
仿小米商城(上)
2021-05-07
自动安装服务2
2021-05-07
js的各种数据类型判断(in、hasOwnProperty)
2021-05-07
严格模式、混杂模式与怪异模式
2021-05-07
HTML 和 CSS 简单实现注册页面
2021-05-07
(SpringMVC)springMVC.xml 和 web.xml
2021-05-07
(LeetCode)Java 求解搜索旋转排序数组
2021-05-07
DP - Tickets - HDU - 1260
2021-05-07
Spring 与使用STOMP消息
2021-05-07
Java Swing JList:列表框组件
2021-05-07
jQuery中的动画
2021-05-07
狂神说MySQL01:初识MySQL
2021-05-07
1.2.3 项目、项目集、项目组合以及运营管理之间的关系
2021-05-07
【△重点△】LeetCode - 4. 寻找两个正序数组的中位数——二分查找
2021-05-07
LeetCode - 5. 最长回文子串——字符串、动态规划
2021-05-07