Java-二叉树删除节点

思路分析

首先先处理:
考虑如果树是空树root,如果只有一个root节点,则等价二叉树置空
然后进行下列操作:
1.因为我们的二叉树是单向的,所以我们判断当前节点的子节点是不是需要删除的节点,而不能判断当前节点是不是需要删除的节点
2.如果当前节点的左子节点不为空,并且左子节点就是要删除的节点,就将this.left=null,并返回
3.如果当前节点的右子节点不为空,并且右子节点就是要删除的节点,就将this.right=null,并返回
4.如果第二步和第三步没有删除节点,那我们就向左子树进行递归
5.如果第四步也没有删除节点,则应当向右子树进行递归

代码实现

//递归删除节点
	public void delNode(int no) {
		if(this.left!=null&&this.left.no==no) {
			this.left=null;
			return;
		}
		if(this.right!=null&&this.right.no==no) {
			this.right=null;
			return;
		}
		if(this.left!=null) {
			this.left.delNode(no);
			return;
		}
		if(this.right!=null) {
			this.right.delNode(no);
			return;
		}
	}
//删除节点
	public void delNode(int no) {
		if(root!=null) {
			//如果只有一个root节点,要立即判断root是否为要删除的节点
			if(root.getNo()==no) {
				root=null;
			}else {
				root.delNode(no);
			}
		}else {
			System.out.println("空树, 不能删除");
		}
		
	}

版权声明:本文为qq_45739810原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。