实现二叉查找树

2019-01-25  本文已影响0人  drummercode
    const arr = ["宇智波鼬", "卡卡西", "斑", "鸣人", "佐助", "小樱", "我爱罗", "李洛克", "凯", "久保带人"].map((data, i) => {
        const index = [49, 23, 56, 102, 44, 32, 20, 84, 2, 103]
        return {
            key: index[i],
            data
        }
    })
    let btree = ""
    // 添加树
    const addBtree = (root, node) => {
        if (root.key > node.key) {
            if (!root.left) {
                root.left = node
            } else {
                addBtree(root.left, node)
            }
        } else {
            if (!root.right) {
                root.right = node
            } else {
                addBtree(root.right, node)
            }
        }
    }
    // 搜索树
    const searchBtree = (root, key) => {
        if (root.left.key == key || root.right.key == key) {
            return root
        } else {
            return root.key > key ? searchBtree(root.left, key) :searchBtree(root.right, key)
        }
    }
    // 删除树
    const deleteBtree = (root, key) => {
        const parentNode = searchBtree(root, key)
        const node = parentNode.left.key == key ? parentNode.left : parentNode.right
        // 如果删除的节点没有右孩子,那么就选择它的左孩子来代替原来的节点
        // 如果被删除节点的右孩子没有左孩子,那么这个右孩子被用来替换被删除节点
        // 如果被删除节点的右孩子有左孩子,就需要用被删除节点右孩子的左子树中的最下面的节点来替换它
    }
    // 生成树
    arr.forEach((data) => {
        const node = {
            left: "",
            right: "",
            ...data
        }
        if (!btree) {
            btree = node
        } else {
            addBtree(btree, node)
        }
    })
    deleteBtree(btree, 20)
上一篇下一篇

猜你喜欢

热点阅读