二叉树的节点的删除的基本步骤

基本要求:
如果需要删除的节点为叶子节点,则删除该节点,将其父节点的指向置为null
如果需要删除的节点为父节点(还存在子节点),则删除整个树结构(删除该节点和其子节点)
基本步骤:
step1:首先判断当前二叉树是否为空(即root节点是否为空)或者当前二叉树只有一个根节点,则等价于将二叉树置空;
step2:因为二叉树是单向的,不能判断当前节点是否需要删除,只能通过判断当前节点的子节点是否需要删除,若是其需要删除的节点,将其子节点置null;
step3:如果当前节点的左子节点不为空,而且该节点是需要删除的节点,那么就this.left=null,结束递归;
step4: 如果当前节点的右子节点不为空,而且该节点是需要删除的节点,那么就this.right=null,结束递归;
step5:如果step3和step4没有删除节点,那么向左进行递归删除操作;

step6:如果step5没有删除节点,那么向右进行递归删除操作;

  1. //二叉树删除节点
  2. public void deleteNode(int id) {
  3. //递归结束的条件
  4. //首先判断当前节点的左子节点是否为空
  5. if (this.left!=null){
  6. if (id==this.left.getId()){
  7. this.left=null;
  8. return;
  9. }
  10. }
  11. // 判断当前节点的右子节点是否为空
  12. if (this.right!=null){
  13. if (id==this.right.getId()){
  14. this.right=null;
  15. return;
  16. }
  17. }
  18. //开始递归回溯
  19. if (this.left!=null){
  20. this.left.deleteNode(id);
  21. }
  22. if (this.right!=null){
  23. this.right.deleteNode(id);
  24. }
  25. }