二叉搜索树(排序二叉树)
2015-12-01 22:25
253 查看
完整代码:插入,查找,删除
struct BST { int val; BST *lch, *rch; BST *insert(BST *p, int x) { if (p == NULL) { BST *t = new BST; //new出来的不是指向NULL的 t->val = x; t->lch = t->rch = NULL; return t; } if (x <= p->val) p->lch = insert (p->lch, x); else p->rch = insert (p->rch, x); return p; } bool find(BST *p, int x) { if (x == p->val) return true; else if (p == NULL) return false; else if (x <= p->val) { return find (p->lch, x); } else { return find (p->rch, x); } } BST *remove(BST *p, int x) { //返回被删除后的新结点的地址 if (p == NULL) return NULL; else if (x <= p->val) p->lch = remove (p->lch, x); else if (x > p->val) p->rch = remove (p->rch, x); else if (p->lch == NULL) { //如果需要删除的结点没有左儿子,那么把右儿子提上去 BST *t = p->rch; delete p; return t; } else if (p->lch->rch == NULL) { //如果需要删除的结点的左儿子没有右儿子,那么把左儿子提上去 BST *t = p->lch; t->rch = p->rch; delete p; return t; } else { //以上两种情况不满足,把左儿子子孙中值最大的结点提上去 BST *t = p->lch; while (t->rch->rch != NULL) t = t->rch; BST *r = t->rch; t->rch = r->lch; r->lch = p->lch; r->rch = p->rch; delete p; return r; } return p; } }bst;
相关文章推荐
- 学习hamcrest和mockito时的总结和demo
- 正则表达式元字符
- Linux下select&poll&epoll的实现原理(一)
- 常用的算法思想总结
- ultraedit高亮显示设置
- 3644 - X-Plosives(水题,并差集)
- jQuery 简单笔记
- lodash用法系列(6),函数种种
- Java虚拟机10:类加载器
- 第二个Sprint冲刺第九天
- hdu-1237简单计算器(栈的运用)
- 二叉搜索树 POJ 2418 Hardwood Species
- CCNA 认证学习(一)
- SST-超级简单任务调度器结构分析
- 第二个spring冲刺第8天
- Elasticsearch 动态映射——自动检测
- Java虚拟机9:Java类加载机制
- 信息安全系统设计基础实验三
- 信息安全系统设计基础实验一
- Excel—“撤销工作表保护密码”的破解并获取原始密码