关于有序二叉树的删除

关于有序二叉树的删除,从大方面分为三种:删除叶子节点、删除只有一棵子树的节点和删除有两颗子树的节点。

一、删除叶子节点

1、找到要删除的节点(目标节点target)。

2、找到要删除节点的父节点(parent)。

(1)如果没有父节点,令root=null。

(2)如果有父节点,判断目标节点是父节点的左孩子还是右孩子。如果是左孩子,令parent.left=null;同理,如果是右孩子,令parent.right=null。

65ae9fdea1af40d0933e131682dc3440.png

二、删除只有一棵子树的节点

1、找到要删除的节点(目标节点target)。

2、找到要删除节点的父节点(parent)。

(1)如果没有父节点,判断目标节点有左子树还是右子树。

206edaeedd37433f9295b27aa6890724.png

(2)如果有父节点 ,判断目标节点是父节点的左孩子还是右孩子,再继续判断目标节点有左子树还是右子树。

997b1b76508342219ad54c2d6237f542.png

三、删除有两颗子树的节点

 1、找到要删除的节点(目标节点target)。

2、找到目标节点左子树的最大值或右子树的最小值。

3、目标节点左子树的最大值或右子树的最小值替换掉目标节点的值。

4、删除目标节点左子树的最大值或右子树的最小值。(根据有序二叉树的性质和特点,不论是目标节点左子树的最大值还是右节点的最小值,都要么是叶子节点,要么只有一棵子树,其删除方法见前两项)。

(思路:想要删除有两颗子树的节点,且保证有序二叉树的结果不变,则需找到一个值来替换掉目标节点的值,并且要满足该值比左子树的值都大,比右子树的值都小,因此,可用目标节点左子树的最大值或右子树的最小值来替换掉目标节点的值。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值