通常,Tree是Tree,List是List,两者不太可能混在一起。但apache-commons库却用tree实现了实现了List的接口,也就是TreeList类。与标准的LinkedList相比,TreeList稍微浪费一点空间,但常用操作的时间复杂度均降低到了O(log N),值得在开发中权衡利弊、合理应用。
内部数据结构
TreeList内部包含了一个Thread AVL Tree。AVL Tree很常见了,是一种典型的Balanced Binary Tree,但下面简单介绍下Thread Binary Tree。
Thread Binary Tree对Binary Tree增加了以下特性:(1)如果一个节点X没有左子树,则把本来应指向左子树的指针,指向中序遍历的前节点;(2)如果一个节点X没有右子树,则把本来应指向右子树的指针,指向中序遍历的后节点。
下图就是一个Thread Binary Tree,以节点5为例:(1)节点5没有左子树,但节点5的中序遍历的前节点是4;(2)节点5没有右子树,但节点5的中序遍历的后节点是6。
这两个特性提高了二叉树依序访问的速度。
以下是TreeList中AVL树节点的定义
static class AVLNode {
/** 左子树或者中序遍历的前节点.*/
private AVLNode l