美文网首页数据结构与算法
用C++实现二叉搜索树

用C++实现二叉搜索树

作者: ITsCLG | 来源:发表于2019-08-20 21:51 被阅读0次

    一棵二叉搜索树是一棵二叉树,可以为空,但它不为空时,满足下述条件:

    1、每个元素都有一个键值且都不相同

    2、左子树的键值都小于树根的键值

    3、右子树的键值都大于树根的键值

    4、左右子树也都是二叉搜索树。

    下图是一棵简单的二叉搜索树:

二叉搜索树

    下面是用C++实现的二叉搜素树的算法:

C++实现二叉搜索树

    上述算法比较难的就是二叉搜索树的节点删除需要分三种情况考虑。第一种,删除节点是树叶,则直接删除;第二种是被删除的节点只有一个子节点,此时只需要将删除节点的上一个节点的指向该节点的指针指向该节点唯一的子节点;第三种是被删除的节点有两个子节点,这种情况是最麻烦的。我们采用的思想是将该节点的该节点右子树中最小的一个节点的值覆盖该节点中的值,然后再删除该节点的右子树中的最小的那个子节点。因为,该节点的右子树中的最小的那个子节点的值刚好大于被删除节点的左子树中所有的值,又小于被删除节点的右子树中所有的值。最小的那个子节点不可能有左子树,不然它就不是最小的节点,删除该节点就转换为删除一个只有一个子节点的节点,即第二种情况。

    可以发现,在代码中,多次用了递归的方法来进行算法的编写,那么递归中的时间复杂度如何分析呢?小编在这里总结一个规律:“递归中进行一次递归调用,递归深度为depth,每个递归中的时间复杂度为T,则总的时间复杂度为O(T*depth)”。当递归中进行多次递归调用时,还要关注递归调用的次数,就像采用递归实现的斐波那契数列一样。

    关于插入,删除,查找等算法的时间复杂度,接下来有时间小编在做分析。小编这里就简单放了一个调试成功无bug的代码,当然也是结合网上其他人总结得到的。

相关文章

  • C/C++ 二叉搜索树

    前言 本文将用C/C++实现二叉搜索树的基本操作:插入、搜索、删除,以及详细的原理介绍。 二叉搜索树 有了这个概念...

  • Leetcode173. 二叉搜索树迭代器

    题目 C++解法 实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。 调用 next() 将返回二...

  • 二叉树的创建和遍历

    二叉树的创建和遍历 如图所示的二叉树,我们用C++来实现其创建和...

  • 用C++实现二叉搜索树

    一棵二叉搜索树是一棵二叉树,可以为空,但它不为空时,满足下述条件: 1、每个元素都有一个键值且都不相同 2...

  • Week-2:树、二叉树、二叉搜索树

    树、二叉树、二叉搜索树的实现和特性 参考链接 二叉搜索树 Demo[https://visualgo.net/zh...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • Avl平衡树--C语言实现

    Avl 平衡树 实现记录 Avl平衡二叉树和搜索二叉树基本实现原理相同,在搜索二叉树的基础上添加树平衡的操作--单...

  • php实现二叉树

    二叉树是数据结构中不可忽略的部分,但是相关的书籍上很少有用php来实现二叉树的,下面是我用php参考C++实现二叉...

  • [数据结构与算法-iOS 实现] AVL 树实现代码附 demo

    iOS AVL 树实现代码附 demo AVL 树继承自 二叉搜索树,只不过 AVL 树为平衡二叉搜索树,所以,...

  • 4. 平衡二叉搜索树 --- BBST(Balance Bina

    BBST - 自平衡二叉搜索树 二叉搜索 : 依旧满足二叉搜索树的性质(充要条件) 实现自平衡 : 在插入和删除后...

网友评论

    本文标题:用C++实现二叉搜索树

    本文链接:https://www.haomeiwen.com/subject/ntppsctx.html