1、 线段树是二叉树,且必定是平衡二叉树,但不一定是完全二叉树。2、 对于区间[a,b],令mid=(a+b)/2,则其左子树为[a,mid],右子树为[mid+1,b],当a==b时,该区间为线段树的叶子,无需继续往下划分。3、 线段树虽然不是完全二叉树,但是可以用完全二叉树的方式去构造并存储它,...
分类:
其他好文 时间:
2014-08-28 11:14:29
阅读次数:
194
题目描述:
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
给定一个有序的链表,要求构建一颗平衡二叉查找树。
解析:二叉查找树的中序遍历的结构就是一颗二叉查找树,要使得最终的二叉查找树的结构尽可能的平衡,也就是说只需要...
分类:
其他好文 时间:
2014-08-23 23:02:31
阅读次数:
389
注:以下源码基于jdk1.7.0_11
之前介绍了一系列Map集合中的具体实现类,包括HashMap,HashTable,LinkedHashMap。这三个类都是基于哈希表实现的,今天我们介绍另一种Map集合,TreeMap。TreeMap是基于红黑树实现的。
介绍TreeMap之前,回顾下红黑树的性质:
首先,我们要明确,红黑树是一种二叉排序树,而且是平衡二叉树。因而红黑树...
分类:
其他好文 时间:
2014-08-23 23:01:21
阅读次数:
510
平衡二叉树的定义 平衡二叉查找树,又称AVL树。它除了具备二叉查找树的基本特征之外,还具有一个非常重要的特点:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值(平衡因子)不超过1。也就是说AVL树每个节点的平衡因子只可能是-1、0和1(左子树高度减去右子树高度)。那么如何是二叉查...
分类:
其他好文 时间:
2014-08-23 11:09:30
阅读次数:
207
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果.....
分类:
其他好文 时间:
2014-08-18 10:26:43
阅读次数:
187
STL中,关联式容器的内部结构是一颗平衡二叉树,以便获得良好的搜索效率。红黑树是平衡二叉树的一种,它不像AVL树那样要求绝对平衡,降低了对旋转的要求,但是其性能并没有下降很多,它的搜索、插入、删除都能以O(nlogn)时间完成。平衡可以在一次或者两次旋转解决,是“性价比”很高的平衡二叉树。...
分类:
其他好文 时间:
2014-08-15 22:36:59
阅读次数:
445
很容易想到递归,实现确实不是太容易,对本人来说。
平衡二叉树是有序的,要求链表也是有序。
代码:
#include
//平衡二叉树转化为双向链表
using namespace std;
typedef struct tree{
int data;
struct tree *lchild;
struct tree *rchild;
}Tree,*pTree;
void...
分类:
其他好文 时间:
2014-08-12 13:37:24
阅读次数:
189
首先来看看set集合容器:
set集合容器实现了红黑树的平衡二叉树数据结构,在插入元素时它会自动调整二叉树的排列,把该元素放到适当的位置,并且
保证左右子树平衡。平衡二叉检索树采用中序遍历算法。
对于set,vector,map等等,它们的前向迭代器定义是这样的(以set为例):
set::iterator it;
for(it=s.be...
分类:
其他好文 时间:
2014-08-07 19:01:10
阅读次数:
269
STL中的map容器的一点总结
一、关于map的介绍
map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动...
分类:
其他好文 时间:
2014-08-07 19:01:06
阅读次数:
249