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);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章