
数据结构
mitsuhide1992
软件研发工程师
展开
-
红黑树、插入删除操作
二叉排序树 一棵自平衡的二叉排序树(二叉搜索树) 生成二叉排序树的过程是非常容易失衡的,最坏的情况就是一边倒(只有右/左子树),这样会导致二叉树的检索效率大大降低(O(n))。 为了维持二叉树的平衡,有各种的算法,如:AVL,SBT,伸展树,TREAP ,红黑树等等。红黑树红黑树需要满足5条性质: - 节点非红即黑 - 根节点是黑色 - 所有NULL结点称为叶子节点,且原创 2016-04-01 13:41:24 · 1829 阅读 · 0 评论 -
二叉树非递归实现先序,中序,后序,按层遍历
思路需要空间换取非递归,利用栈缓存记录。 Java实现数据结构二叉树如下:public class BiTree { private BiTree left = null; private BiTree right = null; private int value; public BiTree (int value) { this.value = v原创 2016-03-28 16:03:45 · 619 阅读 · 0 评论 -
HashMap线程不安全在哪里
线程不安全如果多个线程同时访问这个Map,而且至少一个线程对Map进行结构性的修改(增加,删除操作,update不算),那么它必须在外部进行同步。比如一个线程对HashMap进行扩容,另外一个线程读取HashMap的值,扩容可能导致数组table的length变了。 比如,key原来对应2的位置,扩容后变成了18位置,相当于数组长度从16变成了32。 而一个线程在扩容之前取得了数组length是转载 2016-05-25 12:42:05 · 5605 阅读 · 0 评论 -
ConcurrentHashMap封装的红黑树操作
红黑树操作封装在TreeBin的构造函数中了:TreeBin(TreeNode<K,V> b) { super(TREEBIN, null, null, null); this.first = b; TreeNode<K,V> r = null; for (TreeNode<K,V> x = b, next; x != null; x = next) {原创 2016-05-16 10:42:27 · 775 阅读 · 0 评论 -
二叉树、树、森林转换
树转换为二叉树(1)加线。在所有兄弟结点之间加一条连线。(2)去线。树中的每个结点,只保留它与第一个孩子结点的连线,删除它与其它孩子结点之间的连线。(3)层次调整。以树的根节点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。(注意第一个孩子是结点的左孩子,兄弟转换过来的孩子是结点的右孩子) 森林转换为二叉树(1)把每棵树转换为二叉树。(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二原创 2016-04-21 09:48:28 · 427 阅读 · 0 评论 -
B+ 树与 B- 树区别
m阶B+ 树与 B- 树的不同之处 1) 有 n 棵子树的结点中有 n 个关键字; 2) 非叶结点可以看成是索引部分 索引集 Ai :第i个子结点的指针 Ki :第i个子结点的最大(或最小)关键字 3) 所有叶子结点中包含了全部关键字的信息及指向这些关键字记录的指针,且叶子结点以关键字大小自小至大顺序链接;数据集原创 2016-05-18 10:53:41 · 627 阅读 · 0 评论