本文主要是介绍C++笔记15•数据结构:二叉树之二叉搜索树•,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
二叉搜索树
1.二叉搜索树
概念:
二叉搜索树又称二叉排序树也叫二叉查找树,它可以是一棵空树。二叉树具有以下性质:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树;
2.二叉搜索树功能
1. 二叉搜索树的查找a 、从根开始比较,查找,比根大则往右边走查找,比根小则往左边走查找。b 、最多查找高度次,走到到空,还没找到,这个值不存在。2. 二叉搜索树的插入插入的具体过程如下:a. 树为空,则直接新增节点,赋值给 root 指针b. 树不空,按二叉搜索树性质查找插入位置,插入新节点3.二叉搜索树的删除首先查找元素是否在二叉搜索树中,如果不存在,则返回 , 否则要删除的结点可能分下面四种情 况:a. 要删除的结点无孩子结点b. 要删除的结点只有左孩子结点c. 要删除的结点只有右孩子结点d. 要删除的结点有左、右孩子结点看起来有待删除节点有 4 中情况,实际情况 a 可以与情况 b 或者 c 合并起来,因此真正的删除过程如下:情况 b :删除该结点且使被删除节点的双亲结点指向被删除节点的左孩子结点 -- 直接删除情况 c :删除该结点且使被删除节点的双亲结点指向被删除结点的右孩子结点 -- 直接删除情况 d:在它的右子树中寻找中序下的第一个结点( 也就是删除节点的左子树中最大的值或者删除节点的右子树中最小的值 ),用它的值填补到被删除节点 中,再来处理该结点的删除问题 -- 替换法删除删除9、16、3、10节点其中:节点9和16可以直接删除。3、10节点需要用替换法删除节点3:需要用2节点或7节点来替换节点10:需要用9节点或12节点来替换
3.二叉搜索树的性能
最优情况下,二叉搜索树为完全二叉树 ( 或者接近完全二叉树 ),其平均比较次数为:时间复杂度O(log2(N))最差情况下,二叉搜索树退化为单支树 ( 或者类似单支 ) ,其平均比较次数为:时间复杂度 O(N)解决方法:用三叉链的红黑树或AVL树,一般常用红黑树
这篇关于C++笔记15•数据结构:二叉树之二叉搜索树•的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!