二叉树删除某一指定节点

3种写法:

1,使用递归
对于有左右孩子的情况:
2,删除的时候,如果需要替换,直接进行节点的替换,【这个是节点和值一同替换】
3,删除的时候,如果需要替换,值替换,【节点不变,将节点的值换一下】

public void delete(Key key) {
		delete(root ,key);
	}
public Node delete(Node x,Key key) {
	if (x==null) {
		return null;
	}
	int cmp = key.compareTo(x.key);
	if (cmp0) {
		x.right = delete(x.right,key);
	}else if (cmp0) {
		x.left =  delete(x.left,key);
	}else {
		 //如果key等于x结点的键,完成真正的删除结点动作,要删除的结点就是x;
		//让元素个数-1
		N--;
		//得找到右子树中最小的结点
		if (x.right==null){
			return x.left;
		}
		if (x.left==null){
			return x.right;
		}

最复杂的就是删除结点有左右孩子的
采用替换法的思想,找待删除结点左子树中最大的值替换或者右子树中最小的值替换,才能保证二叉搜索树的结构完整。

换节点的方式

换值的方式

450. 删除二叉搜索树中的节点
代码随想录,递归,迭代

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值