欢迎光临散文网 会员登陆 & 注册

2023新版数据结构与算法Java视频教程(上篇),java高级程序员必学的数据

2023-08-28 20:13 作者:城南無音  | 我要投稿

所有的旋转关键是知道要转成啥样,画个图,标注中序遍历,代码就信手拈来了。

右旋

/**
 * <ol>
 *     <li> 旋转挂载 </li>
 *     <li> 处理 parent </li>
 *     <li> 旋转后直接建立 层级关系 </li>
 * </ol>
 * <br>
 * ---------- ---------- ---------- ---------- ---------- ---------- ----------
 * |           lastLevelNode         |                                |
 * |                 |               |                                |
 * |                 8R.             |         lastLevelNode          |
 * |              /      \           |             |                  |
 * |            5B.       10B        |             5B.                |
 * |          /   \      /  \        |          /       \             |
 * |        3R    6B.  9R   11R      |        3R         8R.          |
 * |       /  \    \                 |       /  \      /    \         |
 * |     2B   4B   7R                |      2B  4B   6B.    10B       |
 * |    /                            |     /          \     /  \      |
 * |  1R                             |   1R           7B  9R   11R    |
 * |  1  2  3 4 5 6 7 8 9 10 11      |   1  2 3 4 5  6 7 8 9 10 11    |
 * |                                 |                                |
 * ---------- ---------- ---------- ---------- ---------- ---------- ----------
 */
public void rightRotate(Node n8) {

    Node lastLevelNode = n8.parent;
    //boolean isLastLeft = n8.isLeft();
    // 1、旋转挂载

    Node n5 = n8.left;
    Node n6 = n5.right;

    n5.right = n8;
    n8.left = n6;

    // 2、处理 parent
    //n5.parent = null;// 错误
    n5.parent = lastLevelNode;
    n8.parent = n5;
    if (n6 != null) {
        n6.parent = n8;
    }


    // 6、旋转后直接建立 层级关系
    //Node lastLevelNode = n5.parent;
    if (lastLevelNode != null) {
        //if (isLastLeft) {
        //    lastLevelNode.left = n5;
        //}else {
        //    lastLevelNode.right = n5;
        //}
        if (lastLevelNode.left == n8) {
            lastLevelNode.left = n5;
        } else {
            lastLevelNode.right = n5;
        }
    } else {
        root = n5;
    }

}

左旋

/**
 * <p>
 * 左旋
 * <p>
 * 大道至简图 <br>
 * ---------- ---------- ---------- ---------- ---------- ----------
 * |                          |                          |
 * |          ntParent        |           ntParent       |
 * |             |            |              |           |
 * |            nT            |             nR           |
 * |               \          |           /              |
 * |                nR        |        nT                |
 * |               /          |          \               |
 * |             nRL          |          nRL             |
 * |            T RL R        |         T RL R           |
 * ---------- ---------- ---------- ---------- ---------- ----------
 */
private void leftRotate(Node nT) {
    Node ntParent = nT.parent;

    Node nR = nT.right;
    Node nRL = nR.left;

    nT.right = nRL;
    nR.left = nT;

    nR.parent = ntParent;
    nT.parent = nR;

    if (nRL != null) {
        nRL.parent = nT;
    }
    if (ntParent == null) {
        root = nR;
    } else if (ntParent.left == nT) {
        ntParent.left = nR;
    } else {
        ntParent.right = nR;
    }

}


大学用C++做项目和练习,工作一直java,所以C++手生,一直想用java写数据结构,这样就可以顺利用java刷leetcode,但是自己搞弯路特别多。感谢满老师



2023新版数据结构与算法Java视频教程(上篇),java高级程序员必学的数据的评论 (共 条)

分享到微博请遵守国家法律