二叉排序树
二叉排序树:BST(Binary Sort Tree),对于二叉排序树的任何一个非叶子结点,要求左子节点的值比当前节点的值小,右子结点的值比当前节点的大。如果有相同的值,可以将该结点放在左子节点或者右子结点。
1 | package BinarySortTree; |
二叉排序树的删除
- 情况一:当要删除的结点没有子结点的时候: (1)需要先去找到要删除的结点targetNode (2)找到targetNode的父节点parent (3)确定targetNode是parent的左子节点还是右子结点 (4)根据前面的情况对应的删除,左子节点:parent.left = null;右子结点:parent.right = null;
- 情况二:删除只有一颗子树的结点 (1)首先找到要删除的结点targetNode (2)找到target的父节点parent (3)确定targetNode的子结点是右子结点还是左子节点 (4)targetNode是parent的左子节点还是右子结点 (5)如果targetNode是parent的左子节点 5.1 targetNode的子结点是左子节点,parent.left=targetNode.left 5.2 targetNode的子结点是右子节点,parent.left=targetNode.right 如果targetNode是parent的右子结点 5.3 targetNode的子结点是左子节点,parent.left=targetNode.right 5.4 targetNode的子结点是右子节点,parent.right=targetNode.right
- 情况三:删除有两颗子树的结点 (1)首先找到要删除的结点targetNode (2)找到target的父节点parent (3)从targetNode的右子树找到最小的结点 (4)用一个临时变量,将最小的值保存到temp (5)删除最小节点 (6)targetNode.value = temp