【随笔】排序二叉树的删除问题
来源:互联网 发布:网络新媒体优势 编辑:程序博客网 时间:2024/05/16 11:14
无论是否是平衡的排序二叉树,删除某个节点一直都是不太好写的函数...
暂且不说平衡二叉树,简单的排序二叉树都不太好删除...
一般都是找到以被删除节点的下一个值(根据排序的次序)来顶这个节点,然后这个节点的查找就不是几句话说得清的了...
排序二叉树我曾经是把待删除节点旋转到叶子再删除...Treap树也可以类似这么做...
Treap叫做踩的话,splay树只能顶上根去再删除...
此外偷懒的方式就是开个bool记录节点被删除没...删除这么麻烦,写个插入负的就等效了...
问题还是要解决的...
对于删除节点可以转到叶子删除的:
void erase(node *&root,int x){node *temp = root;if(root->lchild != null)root = root->lchild;elseif(root->rchild != null)root = root->rchild;delete temp;}
注意这种写法需要保证整个树需要使用自定义的null节点来标记无后继,不能使用默认的空指针NULL。
对于不方便旋转到叶子层删除的形式:
void erase(node *&root,int x){node *temp = root;if(root->lchild != null && root->rchild == null)root = root->lchild;delete temp;}else if(root->lchild == null && root->rchild == null){root = null;delete temp;}else {temp = root->rchild;while(temp->lchild != null)temp = temp->lchild;root->key = temp->key;erase(root,temp->key);}}这种想法感觉挺奇妙的,沙茶又学到了新的姿势...
- 【随笔】排序二叉树的删除问题
- 排序二叉树删除
- 排序二叉树的插入和删除
- 删除排序二叉树的节点
- 树-排序二叉树删除
- 关于排序二叉树的插入问题
- 二叉搜索树的搜索、排序、插入、删除
- 二叉搜索(排序)树的 查找、插入、删除
- 排序二叉树的建立、插入、删除、查找
- 二叉排序的创建,删除,遍历,查找
- 二叉树的删除
- 10_排序二叉树删除-2
- 9_排序二叉树删除-1
- 11_排序二叉树删除-3
- 排序二叉树添加删除java实现
- 二叉树学习随笔
- 数据结构—— 二叉树数据结构的节点删除问题
- 二叉树问题---二叉搜索树查找、插入与删除的代码实现
- ExtJs4 app 模板代码
- 回调机制
- 详解MFC框架窗口、文档和视图
- 网络字节序和主机字节序
- Spring3整合Hibernate4 Lorg/hibernate/cache/CacheProvider异常
- 【随笔】排序二叉树的删除问题
- 线程私有数据
- 深入Oracle Log Buffer 发展史
- 01背包问题 (python版)
- C语言assert()函数用法总结
- SSIS_数据库表数据导出为XML格式
- [Error] g++.exe: 5\mingw\include: No such file or directory
- linux下生成.so文件和.a文件
- 手机APP与原生APP设计的区别