Java实现的二叉搜索树,并实现对该树的搜索,插入,删除操作(合并删除,复制删除) 首先我们要有一个编码的思路,大致如下: 1.查找:根据二叉搜索树的数据特点,我们可以根据节点的值得比较来实现查找,查找值大于当前节点时向右走,反之向左走! 2.插入:我们应该知道,插入的全部都是叶子节点,所以我们就需要找到要进行插入的叶子节点的位置,插入的思路与查找的思路一致. 3.删除: 1)合并删除:一般来说会遇到以下几种情况,被删节点有左子树没右子树,此时要让当前节点的父节点指向当前节点的左子树:当被删节点…
AVL.h文件代码 #pragma once #include<iostream> #include<stack> #include <assert.h> using namespace std; using namespace std; template<class T> struct AVLNode{ T data; AVLNode<T>*left, *right; int bf; AVLNode() :left(NULL), right(N…
本来这个题目就是个合并区间的题,就跟Hotel一样,要插入一段,则找左孩子 合并后的中间区间 右孩子,但是比较恶心的是,他需要实时得到某一段的起终点,或者某个点在第几个段里面,我想过在线段树里面加入几个变量来记录左右边界,发现还是不行,因为还要可以消除某个区间段 后来找博客发现向量原来还可以动态的插入和删除,那我把每一块的起终点放在向量里面,既能有序的进行查找,又能再Free操作的时候,直接马上把这个区间抹除,解决了这个问题,其他就跟Hotel区间查询 和 懒惰标记是一样的了,由于向量里面存储的…
思路 二叉搜索树的插入 TreeNode InsertRec(rootNode, key) = if rootNode == NULL, return new Node(key) if key >= rootNode.data, rootNode.rightChild = InsertRec(rootNode.rightChild, key) if Key < rootNode.data, rootNode.leftChild = InsertRec(rootNode.leftChild, k…
我们知道,对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度O(log2n)同时也由此而决定.但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n).我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉.这…
如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL  Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS). 在这里,我不打算介绍使用SQL  Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计.这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复. 一.了解你用的工具 不要轻视这一点,这是我在这篇文章中讲述的最关键的一…
如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS).在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计.这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复.一.了解你用的工具不要轻视这一点,这是我在这篇文章中讲述的最关键的一条.也许你…
参考链接: http://blog.csdn.net/gabriel1026/article/details/6311339   1126号注:先前有一个概念搞混了: 节点的深度 Depth 是指从根节点到当前节点的长度: 节点的高度 Height 是指从当前节点向下,到子孙中所有叶子节点的长度的最大值.     之前简单了解过 AVL 树,知道概念但一直没动手实践过.Now    AVL 树是二叉搜索树的一种.二叉搜索树的规则就是:每个节点的 left child 都比自己小,right ch…
一.插入.删除.移动.多选 方法一: Cell的插入.删除.移动都有一个通用的方法,就是更新tableView的数据源,再reloadData,这样做实现上是简单一点,但是reloadData是刷新整个tableView,消耗性能. 方法二: 针对指定的位置进行插入.删除.移动 步骤: 1.让tableView进入编辑状态: - (void)setEditing:(BOOL)editing animated:(BOOL)animated 2.tableView会执行代理返回编辑的种类: - (U…
一.B树的定义 一棵m阶的B树,或为空树,或为满足下列特性的m叉树: (1)树中每个结点至多有m棵子树:(2)B树是所有结点的平衡因子均等于0的多路平衡查找树:(3)若根结点不是叶子结点,则至少有两棵子树:(4)除根之外的所有非终端结点至少有⌈m/2⌉棵子树:(5)所有的叶子结点都出现在同一层次上,并且不带信息,通常称为失败结点(失败结点并不存在,指向这些结点的指针为空.引入失败结点是为了便于分析B树的查找性能):(6)所有的非终端结点最多有m-1个关键字,结点的结构如图所示. 其中: ${K_…