public class BNode>{ private int size; //number of items in the node private BNode left; private BPair[] seq; private int capacity;//capacity of the sequence //constructors public BNode(int m){ size=0; left=null; seq= (BPair[]) new BPair[m-1];//Compiler may warn, but ok capacity=m-1; } public BNode(int k,BNode m,BPair[] seq1){ size=k; left=m; seq=(BPair[]) seq1.clone(); capacity=seq.length; } /**create a new node just containing the value e*/ public BNode(E e,int m){ BPair[] myseq=(BPair[]) new BPair[m-1]; //Compiler may warn, but ok myseq[0]=new BPair(e,null); size=1; left=null; seq=myseq; capacity=m-1; } //getters and setters public int getCapacity(){ return capacity; } public int getSize() { return size; } public void setSize(int k) { size = k; } public BNode getLeft() { return left; } public void setLeft(BNode left) { this.left = left; } public BPair[] getSeq() { return seq; } public void setSeq(BPair[] seq) { this.seq = seq; } /**assuming size is < capacity, add element e in order * If value is being passed back up the tree, q1 and q2 are the two nodes formed by * splitting */ public void addElement(BNode q1, BNode q2, E e){ boolean added=false; int temp=0; while((temp(e,q2);added=true;} else{ if (seq[temp].val.compareTo(e)>0){ for(int i=size;i>temp;i--) seq[i]=new BPair(seq[i-1]); seq[temp]=new BPair(e,q2); added=true; } } if (added==true){ if(temp==0) left=q1; else seq[temp-1].setRight(q1); } size++; } /**Assuming sufficient room in node, add pair into next available space*/ public void addPair(BPair mypair){ seq[size]=mypair; size++; } /**find the index median of the values in a full node, and an extra value e * assuming they are all distinct. Equals -1 if median is e*/ public int median(E e){ int m=capacity+1; E[] tempArray= (E[]) new Comparable[m];//Compiler may warn, but ok for(int i=0;itemp;i--) tempArray[i]=tempArray[i-1]; tempArray[temp]=e; } E med = tempArray[m/2]; if (med==e) return -1; temp=0; while((temp0)) return -1; else return temp; } /**separate full node + value e into two subnodes containing elements < med, and * >med respectively * @param e * @return BCluster containing references to the subnodes, and the value being passed up tree */ public BCluster divideNode(E e, BNode p1,BNode p2){ int mymed=median(e); //System.out.println("position of median is: " + mymed); E med; if(mymed==-1) med=e; else med=seq[mymed].getVal(); int m=capacity+1; BNode subNode1=new BNode(m); BNode subNode2=new BNode(m); for(int i=0;i0) subNode2.addPair(seq[i]); } } if (med.compareTo(e)>0) {subNode1.addElement(p1, p2, e);subNode2.setLeft(seq[mymed].getRight());} else{ if (med.compareTo(e)<0) {subNode2.addElement(p1, p2, e);subNode1.setLeft(left);} else{subNode1.getSeq()[subNode1.getSize()-1].setRight(p1); subNode2.setLeft(p2); subNode1.setLeft(left); } } return (new BCluster(subNode1,subNode2,med)); } /**assuming size is >0, remove element e if present*/ public boolean removeElement(E e){ return true; //to be completed } /** is this node a leaf?*/ public boolean isLeaf(){ boolean temp=(left==null); int i=0; while((temp==true)&&(i