二叉查找树/删除结点操作
2016-06-11 17:55
936 查看
数据结构自习笔记之二叉树; 今天看到的章节为二叉查找树,关于删除结点的方法,用笔记记录; 书中介绍的方法为 复制删除(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; }
// 才疏学浅,如有不足,多多指正
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort