二叉查找树/删除结点操作
来源:互联网 发布:如何关闭4g网络 编辑:程序博客网 时间:2024/04/29 18:30
数据结构自习笔记之二叉树;今天看到的章节为二叉查找树,关于删除结点的方法,用笔记记录;书中介绍的方法为 复制删除(deletion by copying)
通常来说,二叉树结点删除的情况有四种;
①待删除结点(以下直接称为结点)为叶结点, 这种情况只要直接delete;
②,③ 结点的左子树或右子树为空, 这两种情况用非空子树的结点覆盖结点;
④结点左右子树均为非空;
这种情况下就用到今天学习到的复制删除;
算法思想:
// 首先定位前驱。为此,需要向左移一步,收到先找到要删除节点左子树//的根,再尽可能的向右移动。之后用找到结点的键值替换要删除结点的//键值(书中摘抄)
操作:
用结点左子树中最右的结点中的值替换结点的值,再删除这个最右结点,该结点的左子树结点代替该节点原来的位置
如图:
具体代码:
template<class T>void BST<T>::deletebyCopying(BSTNode<T>* &node){ BSTNode<T> *previous, *temp = node; if(0 == node->right) node = node->left; else if(0 == node->left) node = node->right; else{ temp = node->left; previous = node; while(temp->right != 0){ previous = temp; temp = temp->right; } node->Element = temp->Element; if(previous == node) previous->left = temp->left; else previous->right = temp->left; } delete temp;}
// 才疏学浅,如有不足,多多指正
1 0
- 二叉查找树/删除结点操作
- 二叉查找树(Binary Search Tree)--结点的删除操作(导入自原博客)
- 二叉查找树的各项操作(重点是结点的删除部分和递归的运用)
- 二叉查找树删除操作
- 二叉树的祖先结点,删除,插入,查找,前驱结点,后继结点等
- 《Algorithms》——删除二叉查找树中的结点
- 删除二叉树结点
- 二叉查找树的结点插入,查找,删除,计算二叉树的高度
- 二叉查找树的删除操作
- 查找二叉树删除节点的操作
- 二叉查找树的删除操作
- 二叉树查找,遍历,删除操作
- 平衡二叉树(AVL)结点删除操作
- 二叉搜索树的创建,结点删除和查找(二叉搜索树)
- 二叉查找树的操作(插入、删除、查找)
- 二叉查找树的基本操作之查找插入删除
- 二叉查找树的插入、删除、查找操作
- 二叉树查找删除
- 向量几何在游戏编程中的使用5
- 布尔运算--java位图搜索实现
- 找工作的一些感悟——前端小菜的成长
- 银行风控案例-python学习笔记
- 字典树(Trie树)模版
- 二叉查找树/删除结点操作
- UML类图符号 各种关系说明以及举例(转载)
- Java 金额封装bean
- 初学网络协议
- 【Java】subsets
- C语言结构体
- Android 替换系统里的默认字体与开机画面
- 剑指offer(六十二)之二叉搜索树的第k个结点
- 自定义RedioButton样式