1、删除叶子节点
1、找到这个叶子节点
2.找到当前节点的父节点
3.判断要删除的节点是父节点的左子树还是右子树
parent.left = null
parent.right = null
情况一:删除叶子节点
思路
(1)需要先去找到要删除的节点 trageNode
(2)找到trageNode的父节点 parent (考虑是否存在父节点)
(3)确定 trageNode是 parent 的左子节点还是右子节点
(4)根据前边的情况对应删除
左子节点:parent.left = null
右子节点:parent.left = null
情况二:删除有两个子树的节点
思路
(1)需要先去找到要删除的节点 trageNode
(2)找到trageNode的父节点 parent (考虑是否存在父节点)
(3)从targetNode的右子树找到最小的节点
(4)用一个临时变量,将最小的节点值保存temp
(5)删除该最小节点
(6)targetNode.value = temp
情况三:删除只有一个子树的节点
思路
(1)需要先去找到要删除的节点 trageNode
(2)找到trageNode的父节点 parent (考虑是否存在父节点)
(3)确定targetNode的子节点是左子节点还是右子节点
(4)targetNode是 parent 的左子节点还是右子节点
(5)如果targetNode有左子节点
(5.1)如果targetNode是parent的左子节点
parent.left = tergetNode.left
(5.2)如果targetNode是parent的右子节点
parent.right = tergetNode.left
(6)如果targetNode有右子节点
(6.1)如果targetNode是parent的左子节点
parent.left = tergetNode.right
(6.2)如果targetNode是parent的右子节点
parent.right = tergetNode.right