首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第39期:小白一看就会的 BST 删除!

    在两节中,我们了解了BST(二叉搜索树)的概念,并且知道了如何在BST中查找一个元素。那我们又如何在BST中去删除一个元素呢?我们将通过本节的例题进行学习! 下面我们仍然通过例题进行讲解。...一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明:要求算法时间复杂度为 O(h),h 为树的高度。...如下图就是一棵典型的BST: ?...我们要删除BST的一个节点,首先需要找到该节点。而找到之后,会出现三种情况。 1、待删除的节点左子树为空,让待删除节点的右子树替代自己。 ?...2、待删除的节点右子树为空,让待删除节点的左子树替代自己。 ? 3、如果待删除的节点的左右子树都不为空。我们需要找到比当前节点小的最大节点(前驱),来替换自己 ?

    3.2K10

    漫画:二叉树系列 第五讲(BST的删除)

    在两节中,我们了解了BST(二叉搜索树)的概念,并且知道了如何在BST中查找一个元素。那我们又如何在BST中去删除一个元素呢?我们将通过本节的例题进行学习! 下面看题:??...一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明:要求算法时间复杂度为 O(h),h 为树的高度。...3 这个节点,然后删除它。...如下图就是一棵典型的BST: 03 图解分析 明确了概念,我们进行分析。...我们要删除BST的一个节点,首先需要找到该节点。而找到之后,会出现三种情况。 待删除的节点左子树为空,让待删除节点的右子树替代自己。 待删除的节点右子树为空,让待删除节点的左子树替代自己。

    2.1K10

    【C++】手写BST

    递归查找子节点那也是非常简单的,和插入结点的递归道理相同,我们不采用暴力递归的方式,而是用搜索树的结构特征进行查找,val大去右面递归查找,val小去左面递归查找,直到key和val相等的时候我们返回true...递归删除结点的实现,我们采用引用结构体指针作为形参,引用总是能带来很多的好处,直接操纵搜索树的结点何乐而不为呢?...思路不变,利用搜索树的结构先进行删除结点的递归查找,等递归找到删除结点后,还是老套路需要分情况进行删除,对于直接删除的情况,这回只需要让他的非空子节点地址覆盖掉当前删除结点地址就够了,这样就完成了托孤行为...而对于交换法删除的情景来说,我们可以利用递归将问题进行转换,虽然交换之后整体不再满足搜索树,但删除结点的右子树依旧满足搜索树,所以我们只要递归删除其右子树就可以,将交换法删除的问题通过递归右子树再次转换为直接删除的问题...root; root = root->_left; delete tmp; } else { //这里的解决方法有两种,一种是直接cv上面的解决方式,一种是通过递归将问题转换为直接删除

    42000
    领券