數據結構

@Override
public Node add(Node node , int add) {
    //若遍歷到空節點,node == null,則node == add
    //若add < node, 則遞歸其左子樹
    //若add > node, 則遞歸其右子樹
    //若add = node, 則直接返回
    if (node!=null){
        if (add > node.getContent()){
            node.setRight(add(node.getRight(),add));
            return node;
        } else if (add < node.getContent()) {
            node.setLeft(add(node.getLeft(),add));
            return node;
        }else {
            return node;
        }
    }else {
        node = new Node(add,null,null);
        return node;
    }
}

@Override
public Node delete(Node node , int delete) {
    //若待刪除元素小於當前節點,則遞歸刪除左子樹
    //若待刪除元素大於當前節點,則遞歸刪除右子樹
    //若待刪除元素等於當前節點,則:
    //    1) 若當前節點爲葉子節點,則直接返回null
    //    2) 若當前節點僅有一個兒子,則返回當前節點的兒子
    //    3)若當前節點有兩個兒子,則讓其右子樹最小元素的值替換該節點的值,然後在其右子樹中遞歸刪除最小節點
    if(node == null){
        throw new RuntimeException("樹中不包含該元素");
    }else if (delete < node.getContent()) {
        node.setLeft(delete(node.getLeft(),delete));
        return node;
    }else if (delete > node.getContent()) {
        node.setRight(delete(node.getRight(),delete));
        return node;
    }else {
        if (node.getLeft() == null && node.getRight() == null){
            return null;
        }else if (node.getLeft() == null || node.getRight() == null){
            return node.getLeft() == null? node.getRight():node.getLeft();
        }else {
            Node rightMin = findMin(node.getRight());
            node.setContent(rightMin.getContent());
            node.setRight(delete(node.getRight(),rightMin.getContent()));
            return node;
        }
    }
}

@Override
public Node search(Node node , int search) {
    //若node == null,直接返回
    //若search > node,則查找其右子樹
    //若search < node,則查找其左子樹
    //若search == node,則返回查找節點
    if (node != null) {
        if (search > node.getContent()) {
            return search(node.getRight(),search);
        }
        if (search < node.getContent()){
            return search(node.getLeft(),search);
        }
        if (search == node.getContent()) {
            return node;
        }
    }
    throw new RuntimeException("查無該節點");
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章