cs61b lab14

实现splayTree,不过感觉大头都已经写好了,难度不算太大。

part1:zig-zig,类似zig-zag,不过是先要rotate node.parent再rotate node。

private void zigZig(BinaryTreeNode node) {

    if(node==node.parent.leftChild){
        rotateRight(node.parent);
        rotateRight(node);
    }
    else{
        rotateLeft(node.parent);
        rotateLeft(node);
    }
      }

part2:splaynode:

private void splayNode(BinaryTreeNode node) {
        while (node.parent != null) {
          if(node.parent.parent!=null){
              if(node.parent.parent.leftChild==node.parent&&node.parent.leftChild==node||node.parent.parent.rightChild==node.parent&&node.parent.rightChild==node){
                  zigZig(node);
              }
              else {
                  zigZag(node);
              }
          }
          else {
              zig(node);
          }
        }

        root = node;
    }

运行结果:

PART I:  Testing zigZig()

Inserting 1G, 3O, 2O, 5J, 4D, 7B, 6O into Tree 1.
Tree 1 is:  (((((1G)2O)3O)4D)5J)6O(7B)
Skipping the rest of Part I.

PART II:  Testing splayNode()

Calling splayNode() on the unbalanced tree:

Inserting 10A, 9B, 8C, 7D, 6E, 5F, 4G, 3H, 2I, 1J
tree is:  1J(2I(3H(4G(5F(6E(7D(8C(9B(10A)))))))))
Calling find(10)
  returned A.
The tree should be better balanced now: (1J((2I)3H((4G)5F((6E)7D((8C)9B)))))10A

Some find() operations on a new tree to test splayNode():

Inserting 3A, 7B, 4C, 2D, 9E, 1F
Tree 2 is:  1F((2D(3A((4C)7B)))9E)
Calling find(7)
  returned B.
Tree 2 is:  (1F((2D)3A(4C)))7B(9E)
Calling find(4)
  returned C.
Tree 2 is:  ((1F(2D))3A)4C(7B(9E))
时间: 2024-07-29 18:08:33

cs61b lab14的相关文章

CS61b homework1

Programe1:根据输入建立URL,读取其网站前五行内容并输出,代码: import java.io.*;import java.net.URL;public class programe1{ public static String reverse(String s){ int len=s.length(); StringBuffer sb=new StringBuffer(len); for(int i=(len-1);i>=0;i--){ sb.append(s.charAt(i));

CS61b lab1代码实现及运行结果

task1:程序是已经给好的,放到编译器里找出了几处错误就能运行了,运行结果如图: task2:不知道它这个lab中说的EMAC是什么,只能在eclipese上简单的写了个排序的程序,任务的要求是根据surname排序,不过鉴于surnname是先出现的,简化起见就 没有区分surnname和Given Name,把两个合在一个String里一起排序了.代码如下: import java.io.*;import java.util.ArrayList;import java.util.Array

CS61b lab3 分享一个bug,足足找了一个多小时,希望各位别入坑哈

part1: 写一个测试程序,比较简单就不贴代码啦,运行结果: part2: 改进InserEnd method,我是按照课上讲的把原来的singlyList变成doubleList,在SListNode中多加入一个prev变量,修改后SListNode: class SListNode { Object item; SListNode next; SListNode prev; SListNode(Object obj) { item = obj; next = null; prev=null

CS61b lab5

part1:父类reference可以指向子类的Object,但子类reference不能指向父类Object,因为子类可能存在更多的method和filed. part2:(a)可以(b,c)不行 (d)可以 interface和superclass的method名称相同,若返回类型和接受参数类型均相同,则不产生歧义可以通过编译,否则则不能通过编译. part3: 接口和父类中的constant会产生歧义,在子类中使用可标明class类型: package lab; class a{ publ

CS61b homework2 打卡

主要考点:String类matches和split方法的运用,正则表达式的运用. 判断闰年,计算天数等算法.代码如下: import java.io.*; public class Date { private int month; private int day; private int year; public Date(int month, int day, int year) { if(!isValidDate(month,day,year)) System.exit(0); this.

cs61b lab10

运行结果: Creating 2-node tree. Testing parent(). Testing insertChild(). Adding two more nodes to the 2-node tree. Adding two more nodes to the 4-node tree. 1132 2131 The tree looks like this: 1 11 12 13 131 132 [The above sequence should be 1, 11, 12, 1

cs61b lab11

实现BinarySearchTree,感觉比前面的2,3,4Tree要简单很多. part1实现find: private BinaryTreeNode findHelper(Comparable key, BinaryTreeNode node) { BinaryTreeNode newnode=node; if(key.compareTo(node.entry.key)==0) return node; else if(key.compareTo(node.entry.key)<0){ if

CS61b homework5

hw5相比hw4,修改了以下的bug,从而更好的实现了对代码的封装: 1:hw4中,remove(n)时,若n不存在于本list却存在于其他list中,会remove其他list中的node,同时减少本list的size. 2:hw5中,listnode本身含有其所包含的list的field,因此可将insertAfter()等方法移到listnode中实现. 3:hw4中,如果在remove(n)后实现insertAfter(n),由于remove后n依然存在,会产生插入的错误. 4:hw4中

cs61b homework4

作业中没给测试代码,测试代码是从一亩三分地论坛上盗的别人的. 运行结果: DList: LockDList: 因为List之前的homework和project中已经实现过好几回了,所以感觉这次作业还比较轻松,没有怎么debug就出来了: 贴一下LockDList的代码好了: LockDListNode: package list; public class LockDListNode extends DListNode { boolean isLocked; LockDListNode(Obj