c++二叉搜索树

Posted SuchABigBug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++二叉搜索树相关的知识,希望对你有一定的参考价值。

目录

一、概念

二叉搜索树又称二叉排序树,它或者是一颗空树

特性:

  1. 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
  2. 若他的右子树不为空,则右子树上所有节点的值都大于根节点的值
  3. 它的左右子树也分别为二叉搜索树

二、操作

2.1 查找

2.2 插入

  1. 我们需要判断树为空,则直接插入,return true
  2. 树不为空,按二叉搜索树性质查找插入位置,插入新节点

    这里当我们new出一个新的节点需要注意,把他进行链接,不然出了此函数就栈销毁了,导致内存泄漏
    因此定义一个parent,进行链接

2.3 删除

  1. 只有一个孩子的情况
    当我们去删除叶节点还好,比如把9删掉,然后父节点置空就可以了,9是cur,那么8就是parent,把parent=nullptr

    假如我们把8删掉,然后把7指向9,一个孩子的情况可以父亲下的孩子托付的他的父亲

  2. 有两个孩子的情况,找一个能替代的值进行删除,假如我们删除5,需要找到一个替代之即比左子树的大,也比右子树小

记住我们的二叉搜索树也是有缺陷的
查找一个数,时间复杂度是O(n),为什么不是O(logn)呢? 这是因为二叉搜索树可能存在这种情况

那么查找的时间复杂度为O(N),这不是一个完全二叉,而是一个单枝

AVL搜索树和红黑树可以很好的去解决这个问题

以上是关于c++二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

C++二叉搜索树

C++二叉搜索树

C++二叉树进阶(二叉搜索树,KV模型)

C++二叉树进阶(二叉搜索树,KV模型)

c++二叉搜索树

c++二叉搜索树