【C++研发面试笔记】9. 基本数据结构-二叉查找树BST
来源:互联网 发布:汇天下p2p源码 编辑:程序博客网 时间:2024/06/04 23:31
【C++研发面试笔记】9. 基本数据结构-二叉查找树BST
BST树即二叉搜索树,其满足如下条件:
1.所有非叶子结点至多拥有两个儿子(Left和Right);
2.所有结点存储一个关键字;
3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
9.1 BST树的搜索
- 从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;
- 否则如果查询关键字比结点关键字小,就进入左儿子;
- 如果比结点关键字大,就进入右儿子;
- 如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
如果BST树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变BST树结构(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;
同样的关键字集合有可能导致不同的树结构索引;所以,使用BST树还要考虑尽可能让BST树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题;
9.2 BST的建立
9.2.1 结构
9.2.2 插入
递归方法:
9.2.3 构建
9.2.4 查找
递归方法:
先序遍历
中序遍历
9.2.5 删除节点
删除操作也类似于查找,是个递归过程,只不过删除操作在找到被删除节点后的处理要复杂些,需考虑下面4种情形:
- 当前节点的关键值等于待删除关键值,则进入删除处理过程;
- 当前节点的关键值小于待插入节点关键值,根据BST的定义,应在当前节点的左子树上递归删除操作;
- 当前节点的关键值大于待插入节点关键值,根据BST的定义,应在当前节点的右子树上递归删除操作;
- 若当前节点为空,则说明查找不到待删除关键值的节点,返回-1指示删除失败。
删除处理过程又需要考虑以前几种情形:
- 待删除节点为叶子节点(左右孩子均为空);
a) 将待删除节点的父节点指向该待删除节点的指针置为空,
b) 删除待删除节点。 - 待删除节点的左孩子为空,右孩子非空;
a) 将待删除节点的父节点重新指向待删除节点的右孩子
b) 删除待删除节点。 - 待删除节点的左孩子非空,右孩子为空;
a) 将待删除节点的父节点重新指向待删除节点的左孩子
b) 删除待删除节点 - 待删除节点的左孩子非空,右孩子非空。
a) 将待删除节点的关键值与其右子树上值最小节点的值交换
b) 也可以选择待删除节点左子树上的最大值节点进行交换
这篇博文是个人的学习笔记,内容许多来源于网络(包括CSDN、博客园及百度百科等),博主主要做了微不足道的整理工作。由于在做笔记的时候没有注明来源,所以如果有作者看到上述文字中有自己的原创内容,请私信本人修改或注明来源,非常感谢>_<
0 0
- 【C++研发面试笔记】9. 基本数据结构-二叉查找树BST
- 数据结构 二叉查找树 BST
- 【C++研发面试笔记】8. 基本数据结构-二叉堆
- 【C++研发面试笔记】10. 基本数据结构-平衡二叉搜索树AVL
- 数据结构002 - 二叉查找树(BST)
- 数据结构-二叉查找树(BST)
- 数据结构之查找二叉树--BST
- 数据结构: 二叉查找树(BST)
- 【C++研发面试笔记】14. 基本数据结构-查找表与并查集
- 数据结构基础5.2:二叉搜索树(BST)的基本操作(插入、查找、删除)
- BST二叉查找树
- BST二叉查找树
- 二叉查找树 BST
- BST二叉查找树
- 二叉查找树BST
- 二叉查找树BST
- BST二叉查找树
- BST-二叉查找树
- 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
- 角点绘制2
- 求1+2!+3!+...+20!的和。
- BNUOJ 52296 Nearest Neighbor Search(十一弱校联盟 暴力分情况)
- 【CUDA开发】Thrust库
- 【C++研发面试笔记】9. 基本数据结构-二叉查找树BST
- 利用递归方法求5!。
- 树状数组点更新,区间更新理解
- 循环链表API
- 复位按钮的消抖以及初始化代码
- 日常
- 55分钟学会正则表达式
- 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
- 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同