用时:30min
题目分两个部分需要解决,搜索和删除
搜索部分就是找到节点,可以根据二叉搜索树的性质来找到需要的节点
删除分三种情况
- 只有左孩子,用左孩子代替
- 只有右孩子,用右孩子代替
- 都没有,则赋值为null ( 由于前面有递归赋值,所以这边可以成功
- 都有,则储存左孩子后,用右孩子代替,然后找到左孩子在右边的位置
var deleteNode = function(root, key) {
function insert(root,node) {
if (root.val > node.val) {
if (!root.left) {
root.left = node
} else {
insert(root.left,node)
}
} else {
if (!root.right) {
root.right = node
} else {
insert(root.right,node)
}
}
}
function search(root) {
if (!root) {
return null
}
if (root.val > key) {
root.left = search(root.left)
} else if (root.val < key){
root.right = search(root.right)
} else {
if (!root.left && !root.right) {
root = null } else if (root.left && root.right) {
var left = root.left root = root.right insert(root,left)
}
else if (root.left) {
root = root.left } else if (root.right) {
root = root.right }
}
return root }
return search(root)
};需要注意的点
- 考虑节点不存在的情况
- 删除一个节点的方法,可以给左(右 节点赋值为递归的返回值