JAVA自己用简单代码构建节点模型

人生第三篇CSDN博客,好像没有之前那么激动了….

/**
 * Created by fushuang on 2016/8/3.
 */
/*
                     8
            4                  12
     2           6       10          14
  1     3     5    7   9    11   13      15

做了一天啊。。。这我真的好好说说了,当删除一个数的时候,先从右边找(从左找也行,只要把和他最临近的数移动到他的位置上就行),
一.
1.判断他的右子是否为空,如果不为空,
找右子的左子是否为空,如果不为空(如4 或12),调用findFinalLeft函数找到这条树最左边的叶子节点(即离要删掉的数最近的数)
2.如果被删数右子的左子为空比如10,将11放在10的位置上(只是放date),将10的右子置为null,
二.
1.如果被删数的右子为空,只能用左边的数来代替了,同理判断左子的右子如果不是空,调用findFinalRight找到最邻近被删数的叶子节点(找邻近的左右都行,只是因为被删数没有右子,如删12 找到 11 和 13 都行 ,假设14 不在,只能找 11 了)
如果左子的右子为空,将左子放入被删数的位置,被删数的左子置为null

 */
public class MyTreeNode<T extends Comparable<T>>  {
    private T date;
    private MyTreeNode<T> leftson;
    private MyTreeNode<T> rightson;
    private MyTreeNode<T> parent;
        public void remove(T t){

        int i = date.compareTo(t);
        if(i<0){
            rightson.remove(t);
        }
        if (i>0){
            leftson.remove(t);
        }
        if (i==0){
            if (rightson !=null) {
                if(rightson.leftson!=null){
                    date=rightson.findFinalleft();
                }else {
                    if (rightson.rightson==null){
                        date =rightson.date;
                        rightson=null;
                    }else {
                        date =rightson.date;
                        parent.rightson=rightson;
                    }
                }
            }else if(leftson!=null){
                if(leftson.rightson !=null){

                    date=leftson.findFinalright();
                }else {
                    date=leftson.date;
                    parent.leftson=leftson;
                }
            }else {
               int k= date.compareTo(parent.date);
                if(k>0){
                    parent.rightson=null;
                }else {
                    parent.leftson=null;
                }
            }
        }
    }
    private T findFinalleft(){
        if (leftson.leftson==null){
            T date=leftson.date;
            leftson =leftson.rightson;
            return date;
        }else {
            return leftson.findFinalleft();
        }
    }
    private T findFinalright(){
        if (rightson.rightson==null){
            T date=rightson.date;
            rightson=rightson.leftson;
            return date;
        }else {
            return rightson.findFinalright();
        }
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        if (this.leftson!=null){
            builder.append(this.leftson.toString());
        }
        builder.append(" "+date +" ");
        if (this.rightson!=null){
            builder.append(this.rightson.toString());
        }
        return builder.toString();
    }

    public void add(T t){

        int i= date.compareTo(t);
        if (i<0){
            if (this.rightson==null){
                rightson=new MyTreeNode<T>(t);
                rightson.parent=this;
            }
            else {
                rightson.add(t);
            }
        }
        if (i>0){
            if (this.leftson ==null){
                leftson=new MyTreeNode<T>(t);
                leftson.parent=this;
            }
            else {
                leftson.add(t);
            }
        }
    }

    public MyTreeNode(T date) {
        this.date = date;
    }

    public T getDate() {
        return date;
    }

    public void setDate(T date) {
        this.date = date;
    }

    public MyTreeNode<T> getLeftson() {
        return leftson;
    }

    public void setLeftson(MyTreeNode<T> leftson) {
        this.leftson = leftson;
    }

    public MyTreeNode<T> getRightson() {
        return rightson;
    }

    public void setRightson(MyTreeNode<T> rightson) {
        this.rightson = rightson;
    }

    public MyTreeNode<T> getParent() {
        return parent;
    }

    public void setParent(MyTreeNode<T> parent) {
        this.parent = parent;
    }


    public static void main(String[] args) {
        MyTreeNode<Integer> node=new MyTreeNode<>(8);
        node.add(4);
        node.add(2);
        node.add(1);
        node.add(3);
        node.add(6);
        node.add(5);
        node.add(7);
        node.add(12);
        node.add(10);
        node.add(14);
        node.add(9);
        node.add(11);
        node.add(13);
        node.add(15);
//        System.out.println(node);
        node.remove(8);
        System.out.println(node);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章