带你读《图解算法小抄》十二、树(1)https://developer.aliyun.com/article/1348188?groupCode=tech_library
删除
remove(value) 前置条件:value为要删除的节点的值,root为BST的根节点,count为BST中的项数 后置条件:如果找到并删除了值为value的节点,则返回true;否则返回false nodeToRemove ← findNode(value) 如果 nodeToRemove = ø 返回 false 结束如果 parent ← findParent(value) 如果 count = 1 root ← ø 否则,如果 nodeToRemove.left = ø 并且 nodeToRemove.right = ø 如果 nodeToRemove.value < parent.value parent.left ← nodeToRemove.right 否则 parent.right ← nodeToRemove.right 结束如果 否则,如果 nodeToRemove.left != ø 并且 nodeToRemove.right != ø next ← nodeToRemove.right 当 next.left != ø next ← next.left 结束循环 如果 next != nodeToRemove.right remove(next.value) nodeToRemove.value ← next.value 否则 nodeToRemove.value ← next.value nodeToRemove.right ← nodeToRemove.right.right 结束如果 否则 如果 nodeToRemove.left = ø next ← nodeToRemove.right 否则 next ← nodeToRemove.left 结束如果 如果 root = nodeToRemove root = next 否则,如果 parent.left = nodeToRemove parent.left = next 否则,如果 parent.right = nodeToRemove parent.right = next 结束如果 结束如果 count ← count - 1 返回 true 结束remove
查找节点的父节点
findParent(value, root) 前置条件:value为要查找其父节点的节点的值,root为BST的根节点 且不为ø 后置条件:如果找到value的父节点,则返回对其的引用;否则返回ø 如果 value = root.value 返回 ø 结束如果 如果 value < root.value 如果 root.left = ø 返回 ø 否则,如果 root.left.value = value 返回 root 否则 返回 findParent(value, root.left) 结束如果 否则 如果 root.right = ø 返回 ø 否则,如果 root.right.value = value 返回 root 否则 返回 findParent(value, root.right) 结束如果 结束如果 结束findParent
带你读《图解算法小抄》十二、树(3)https://developer.aliyun.com/article/1348185?groupCode=tech_library