平衡二叉查找树
平衡二叉查找树是很早出现的平衡树,因为所有子树的高度差不超过1,所以操作平均为O(logN)。
平衡二叉查找树和BS树很像,插入和删除操作也基本一样,但是每个节点多了一个高度的信息,在每次插入之后都要更新树的每个节点的高度,发现不平衡之后就要进行旋转。
单旋转
单旋转是碰到左左或者右右的情况下所使用的方法。
例如:
3
2
...
分类:
其他好文 时间:
2014-08-10 01:46:39
阅读次数:
238
问题:从上到下打印二叉树的每一行分析:先搜出二叉树的高度,然后遍历高度,每次搜索一个高度class Solution {public: int dfs(TreeNode *root) { if(root==NULL) return 0; if(root->le...
分类:
其他好文 时间:
2014-08-06 21:53:32
阅读次数:
278
AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. L...
分类:
其他好文 时间:
2014-08-03 23:03:06
阅读次数:
273
有一个棵树,不一定是二叉树,有n个节点,编号为0到n-1。有一个数组A,数组的索引为0到n-1,数组的值A[i]表示节点i的父节点的id,根节点的父节点id为-1。给定数组A,求得树的高度。 分析这个题目我们首先把数组写出来,然后进一步分析,就很明了了,如下例子: 333-1201234根据题意:
节点0,1,2的父节点为3
节点3是根节点
节点4的父节点为2
...
分类:
其他好文 时间:
2014-07-21 16:34:02
阅读次数:
180
给定一棵二叉树, 如何确定这棵二叉树的高度(即树的最大的深度), 是一个很常见的问题。
给下图回顾一下:
关于高度和深度的概念, 参见上图。
NOTE: 高度: 参考节点是距离节点最远的叶子
深度: 参考节点是根节点
寻找二叉树的高度也可以通过一个递归函数(a recursive function)实现, 这依然源于树是一个递归的数据结构。
例如, 对于下图, 我们可以求出根...
分类:
编程语言 时间:
2014-07-21 09:18:35
阅读次数:
344
基本概念结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层。二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度。二叉树在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree...
分类:
其他好文 时间:
2014-07-13 23:45:49
阅读次数:
284
#define MAX_N 50005int par[MAX_N] ;//父亲 int rank[MAX_N] ;//树的高度 void INIT(int n){ for(int i=0 ;i<n ;i++){ par[i]=i ; rank[i]=0 ; }...
分类:
其他好文 时间:
2014-07-11 09:14:42
阅读次数:
202
判断一棵树是不是平衡二叉树,之前做过,还有点印象,用一个函数返回树的高度,如果是-1的话,就说明子树不平衡。1A很开心~ 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * T...
分类:
其他好文 时间:
2014-07-07 13:56:05
阅读次数:
180
排序二叉树对于我们寻找无序序列中的元素的效率有了大大的提高。查找的最差情况是树的高度。这里就有问题了,将无序数列转化为二叉排序树的时候,树的结构是非常依赖无序序列的顺序,这样会出现极端的情况。【如图1】: 这样的一颗二叉排序树就是一颗比较极端的情况。我们在查找时候,效率依赖树的高度,所以不希望这样....
分类:
其他好文 时间:
2014-06-25 15:54:27
阅读次数:
300
AVLTree即(Adelson-Velskii-Landis Tree),是加了额外条件的二叉搜索树。其平衡条件的建立是为了确保整棵树的深度为O(nLogn)。平衡条件是任何节点的左右子树的高度相差不超过1.在下面的代码中,编程实现了AVL树的建立、查找、插入、删除、遍历等操作。采用C++类封装。...
分类:
编程语言 时间:
2014-06-25 13:32:44
阅读次数:
353