数据结构

@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("查无该节点");
}


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