实现二叉查找树
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)