美文网首页
实现二叉查找树

实现二叉查找树

作者: drummercode | 来源:发表于2019-01-25 16:14 被阅读0次
        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)
    

    相关文章

      网友评论

          本文标题:实现二叉查找树

          本文链接:https://www.haomeiwen.com/subject/wlnmjqtx.html