c++二叉搜索树
Posted SuchABigBug
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++二叉搜索树相关的知识,希望对你有一定的参考价值。
目录
一、概念
二叉搜索树又称二叉排序树,它或者是一颗空树
特性:
- 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
- 若他的右子树不为空,则右子树上所有节点的值都大于根节点的值
- 它的左右子树也分别为二叉搜索树
二、操作
2.1 查找
2.2 插入
- 我们需要判断树为空,则直接插入,return true
- 树不为空,按二叉搜索树性质查找插入位置,插入新节点
这里当我们new出一个新的节点需要注意,把他进行链接,不然出了此函数就栈销毁了,导致内存泄漏
因此定义一个parent,进行链接
2.3 删除
-
只有一个孩子的情况
当我们去删除叶节点还好,比如把9删掉,然后父节点置空就可以了,9是cur,那么8就是parent,把parent=nullptr
假如我们把8删掉,然后把7指向9,一个孩子的情况可以父亲下的孩子托付的他的父亲 -
有两个孩子的情况,找一个能替代的值进行删除,假如我们删除5,需要找到一个替代之即比左子树的大,也比右子树小
记住我们的二叉搜索树也是有缺陷的
查找一个数,时间复杂度是O(n),为什么不是O(logn)呢? 这是因为二叉搜索树可能存在这种情况
那么查找的时间复杂度为O(N),这不是一个完全二叉,而是一个单枝
AVL搜索树和红黑树可以很好的去解决这个问题
以上是关于c++二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章