- packagecom.eshore.sweetop.dataframe;
- importjava.util.Random;
- importcom.eshore.sweetop.data.KeyData;
- importcom.eshore.sweetop.data.Node;
- /*
- *bintree
- */
- publicclassBintree{
- privateNoderoot;
- publicvoidinsert(Nodenode){
- Nodey=null;
- Nodex=root;
- while(x!=null){
- y=x;
- if(node.getData().getKey()<x.getData().getKey()){
- x=x.getLeft();
- }else{
- x=x.getRight();
- }
- }
- node.setParent(y);
- if(y==null){
- root=node;
- }elseif(node.getData().getKey()<y.getData().getKey()){
- y.setLeft(node);
- }else{
- y.setRight(node);
- }
- }
- publicNodegetRoot(){
- returnroot;
- }
- publicvoidwalk(){
- walk(root);
- }
- privatevoidwalk(Nodenode){
- if(node!=null){
- walk(node.getLeft());
- System.out.println(node.getData());
- walk(node.getRight());
- }
- }
- publicNodesearch(intk){
- Nodenode=root;
- while(node!=null&&k!=node.getData().getKey()){
- if(k<node.getData().getKey()){
- node=node.getLeft();
- }else{
- node=node.getRight();
- }
- }
- returnnode;
- }
- publicNodemin(Nodenode){
- while(node.getLeft()!=null){
- node=node.getLeft();
- }
- returnnode;
- }
- publicNodemin(){
- returnmin(root);
- }
- publicNodemax(Nodenode){
- while(node.getRight()!=null){
- node=node.getRight();
- }
- returnnode;
- }
- publicNodemax(){
- returnmax(root);
- }
- publicNodesuccessor(Nodenode){
- if(node.getRight()!=null){
- returnmin(node.getRight());
- }
- Nodey=node.getParent();
- while(y!=null&&node==y.getRight()){
- y=y.getParent();
- }
- returny;
- }
- publicvoiddelete(Nodenode){
- Nodetempy,tempx;
- if(node.getLeft()==null||node.getRight()==null){
- tempy=node;
- }else{
- tempy=successor(node);
- }
- if(tempy.getLeft()!=null){
- tempx=tempy.getLeft();
- }else{
- tempx=tempy.getRight();
- }
- if(tempx!=null){
- tempx.setParent(tempy.getParent());
- }
- if(tempy.getParent()==null){
- root=tempx;
- }elseif(tempy==tempy.getParent().getLeft()){
- tempy.getParent().setLeft(tempx);
- }else{
- tempy.getParent().setRight(tempx);
- }
- if(tempy!=node){
- node.setData(tempy.getData());
- }
- }
- publicstaticvoidmain(String[]args){
- Bintreebt=newBintree();
- Randomrd=newRandom(47);
- Nodenode=null;
- for(inti=0;i<5;i++){
- node=newNode();
- node.setData(newKeyData(rd.nextInt(22)+1));
- bt.insert(node);
- }
- bt.walk();
- System.out.println(bt.search(9).getData());
- System.out.println("Min:"+bt.min().getData());
- System.out.println("Max:"+bt.max().getData());
- bt.delete(bt.search(22));
- bt.walk();
- }
- }