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