学习数据结构 AVL树
前一篇学习了二叉搜索树,本篇试图学习 AVL 树。可惜的是,Mehta 教授的《数据结构基础》一书中没有给出 删除算法,我还没研究清楚,只好先不写(学)删除部分了。 修改后的 TestTree.java 文件在这里: http://vdisk.weibo.com/s/3fAzF 以下是 insert 部分的代码,注释我已经写得挺清楚的了: public void insert(K key, V value) { this.checkValid(); // 检查现在树的有效性。 internal_insert(key, value); // 实际执行插入。 this.checkValid(); // 插入之后再检查一次。 } /** 内部实现 insert, 返回插入或更新的节点对象。 */ private boolean internal_insert(K key, V value) { if (this.root == null) { // 特定情况,简单处理。 this.root = new TreeNode<K,V>(key, value); return true; } // 第一步:查找 key 的插入位置。 boolean found = false; TreeNode<K, V> a = root, // 离插入点最近的 bf=+-1 的节点,也可能为 root(其