二叉树的删除要考虑三种情况
1.删除的节点是叶子节点
2.删除的节点只有一个子树
3.删除的节点有两个子树
删除的节点是叶子节点
- 找到删除的叶子结点tNode
- 找到目标节点的父节点pNode(考虑是否有父节点)
- 找到删除节点是父节点的左子树还是右子树
- 根据前边情况进行删除
- 右子树:p.rc=null
- 左子树:p.lc=null
删除的节点只有一个子树
- 找到删除的叶子结点tNode
- 找到目标节点的父节点pNode(考虑是否有父节点)
- 找到删除节点是父节点的左子树还是右子树
- 确定删除节点是左子树还是右子树
- 根据前边情况进行删除
- tNode是它父节点的左子树
- tNode有左子树 : pNode.lc=tNode.lc
- tNode有右子树 : pNode.lc=tNode.rc
- tNode是是它父节点的右子树
- tNode有左子树 : pNode.rc=tNode.lc
- tNode有右子树 : pNode.rc=tNode.rc
- tNode是它父节点的左子树
删除的节点有两个子树
- 找到删除的叶子结点tNode
- 找到目标节点的父节点pNode(考虑是否有父节点)
- 找到删除节点右子树中最小的或找到左子树中最大的
- 将右子树当中最大的值替换掉删除节点的值
- 使删除叶子节点的逻辑,删除最小值