二叉搜索树的插入与删除

简介:
题目:创建一个类,类中的数据成员时一棵二叉搜索树,对外提供的接口有添加结点和删除结点这两种方法。用户不关注二叉树的情况。要求我们给出这个类的结构以及实现类中的方法。

思路

添加结点:

添加结点其实很容易,我们只需要找到结点所行对应的位置就可以了,而且没有要求是平衡的二叉搜索树,因此每次添加结点都是在叶子结点上操作,不需要修改二叉搜索树整体的结构。要找出添加节点在二叉搜索树中的位置,可以用一个循环解决。判断插入结点与当前头结点的大小,如果大于头结点则继续搜索右子树,如果小于头结点则继续搜索左子树。直到搜索到叶子结点,此时进行插入结点操作。如果插入的结点等于二叉搜索树中当前某一结点的值,那么退出插入操作,并告知用户该结点已经存在。

删除结点:

删除结点比较麻烦,因为需要调整树的结构,这是因为删除结点并不一定发生在叶子结点。如果删除的是叶子结点,那么操作非常简单,只是做相应的删除就可以了,但如果删除的是非叶子结点,那么就需要调整二叉搜索树的结构。调整的策略有两个。假设当前需要删除的结点为A,

  1. 找出A结点左子树中的最大值结点B,将B调整到原先A的位置。
  2. 找出A结点右子树中的最小值结点C,将C调整到原先A的位置。

 这其中涉及到许多复杂的指针操作,在下面的代码示例中并没有完成结点删除操作,等有空再补充研究一下。 

代码示例

View Code

总结


本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/05/15/2501337.html,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
关系型数据库 C++
红黑树的插入(C++实现)
红黑树的插入(C++实现)
20 0
|
3月前
|
算法 Java C++
实现二分查找树,支持插入、删除、查询操作。
实现二分查找树,支持插入、删除、查询操作。
17 0
|
3月前
|
NoSQL 容器 消息中间件
二叉搜索树查询/插入/求前驱/求后继/删除
二叉搜索树查询/插入/求前驱/求后继/删除
二叉搜索树查询/插入/求前驱/求后继/删除
|
3月前
|
Java C++ Python
leetcode-701:二叉搜索树中的插入操作
leetcode-701:二叉搜索树中的插入操作
15 1
二叉排序树的插入和删除操作
二叉排序树的插入和删除操作
|
8月前
|
存储 C++
链表操作:插入、删除与遍历
(笔者画图不易呜呜)链表是一种基本的数据结构,它可以用来存储一系列的元素,并且支持灵活的插入、删除操作。在计算机科学中,链表常常用于构建更复杂的数据结构,如栈、队列以及图等。
189 0
|
9月前
链表学习(链表的创建,插入,删除,查找,遍历)
链表学习(链表的创建,插入,删除,查找,遍历)
84 0
|
10月前
|
算法
单链表结点的插入与删除
单链表结点的插入与删除
76 0
|
11月前
二叉排序树的建立、查找、插入、删除
二叉排序树的建立、查找、插入、删除
|
12月前
|
算法
一天一个算法——>二叉搜索树的插入、查询、删除
一天一个算法——>二叉搜索树的插入、查询、删除
57 0

热门文章

最新文章