⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 splaytree.java

📁 Java写的部分数据结构源码
💻 JAVA
字号:
/****************************  SplayTree.java  ************************ *                     generic splaying tree class */public class SplayTree extends BST {    public SplayTree() {        super();    }    private void continueRotation(BSTNode gr, BSTNode par,                                  BSTNode ch, BSTNode desc) {        if (gr != null) {                    // if p has a grandparent;             if (gr.right == ((SplayTreeNode)ch).parent)                  gr.right = ch;             else gr.left  = ch;        }        else root = ch;        if (desc != null)             ((SplayTreeNode)desc).parent = par;        ((SplayTreeNode)par).parent = ch;        ((SplayTreeNode)ch).parent = gr;    }    private void rotateR(SplayTreeNode p) {        p.parent.left = p.right;        p.right = p.parent;        continueRotation(((SplayTreeNode)p.parent).parent,p.right,p,p.right.left);    }    private void rotateL(SplayTreeNode p) {        p.parent.right = p.left;        p.left = p.parent;        continueRotation(((SplayTreeNode)p.parent).parent,p.left,p,p.left.right);    }    private void semisplay(SplayTreeNode p) {        while (p != root) {            if (((SplayTreeNode)p.parent).parent == null) // if p's parent is                  if (p.parent.left == p)              // the root;                      rotateR(p);                 else rotateL(p);            else if (p.parent.left == p)     // if p is a left child;                 if (((SplayTreeNode)p.parent).parent.left == p.parent) {                      rotateR((SplayTreeNode)p.parent);                      p = (SplayTreeNode)p.parent;                 }                 else {                      rotateR((SplayTreeNode)p); // rotate p and its parent;                      rotateL((SplayTreeNode)p); // rotate p and its new parent;                 }            else                             // if p is a rigth child;                 if (((SplayTreeNode)p.parent).parent.right == p.parent) {                      rotateL((SplayTreeNode)p.parent);                      p = (SplayTreeNode)p.parent;                 }                 else {                      rotateL(p);            // rotate p and its parent;                      rotateR(p);            // rotate p and its new parent;                 }                 if (root == null)           // update the root;                      root = p;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -