二叉查找树的删除方法.

给定一个二叉树.

1.删除叶子节点,直接将叶子节点设为null即可,

2.删除有一个孩子的节点,例如4,有一个左儿子,只需要即将左儿子赋值给它即可.

3,删除有两个孩子的节点,这事要将其中一个孩子的值赋给它,在删除赋值的节点.

private BinaryNode<AnyType> remove(AnyType x,BinaryNode<AnyType> t){
		if(t == null){ //该情况表示没有找到x,什么操作也不做.
			return t;
		}
		int compareResult=x.compareTo(t.element); //用x与t的值进行对比
		if(compareResult<0){  //代表x比t的值小,应该从t的左子树进行寻找
			t.left=remove(x,t.left);
		}else if(compareResult>0){
			t.right=remove(x,t.right);
		}else if(t.left!= null && t.right != null){ //两个孩子均不为空
			t.element=findMin(t.right).element;
			t.right=remove(x,t.right);
		}else{
			t=(t.left!=null)? t.left: t.right;   //有一个孩子或一个孩子都没有
		}
		return t;
	}

猜你喜欢

转载自blog.csdn.net/qq_30092289/article/details/86654909
今日推荐