关于二叉树的删除节点的想法1

对于二叉树的删除节点的操作一般有三种情况 
1.后继无人 就是该节点没有左孩子 右孩子
2.后继有右 就是该节点只有一个节点(可以是左孩子 也可以是右孩子)
3.后继有俩 就是该节点有左右孩子

情况1:
	删除了该节点 则该节点的状态为空了
	一个二叉树已经是有了大小顺序 设置要删除的节点的值为key 如果key的值大于root的值 就直接向右边找 如果不是往左边找 然后查找是否存在相同值得节点 如果找到得话 就直接删除该节点即可
	语句:
	public boolean delete(int key){
		Node cur = root;
		Node pre = root;
		//先假设左孩子是不存在得
		boolean islc = null;
		//查找我们要查找的值是否在树里面存在
		while( cur.data != key){
		//将当前赋值为父节点
			pre =  cur; 
		//将key进行划分为是哪一类得
		if(cur.data > key){
		//可以达到Key是属于左孩子得
		//所以假设左孩子是存在 才好继续往下找
			islc = true;
			cur = cur.lc;
		}
		else{
		//要寻找得不在根节点得左孩子的系列 属于右孩子 就没有必要往左孩			//子那边进行寻找 就将左孩子设置为空
			islc = false;
			cur = cur.rc;
		}
		//特殊情况
		if( cur == null){
			return null;
		}
	}

//现在是我们要查找的值 没有后代节点 所以我们对其进行删除
//没有左右孩子
if(cur.lc == null && cur.rc == null){
//现在就是进行逐步分析
//只有一个节点
	if(cur == root){
	//将根节点判空
		root = null;
	}
//假如是左孩子 就得删除
	if(islc){
	//就将左孩子赋值为空
		pre.lc = null;
	}
	else{
		pre.rc = null;
	}
retrun true;
}
retrun false;
}

猜你喜欢

转载自blog.csdn.net/shuyan745294340/article/details/88585163