首页 文章

给定BST和BST中的节点,将该节点作为树的新根

提问于
浏览
0

给定 BSTBST 中的节点,将该节点作为树的新根 . 但是在将此节点设置为root之后仍然将树维护为 BST .

我尝试如下:将给定节点作为根,如果它在原始根的左侧,则将原始根作为其右子,并将原始根的子节点作为新根的左子节点(类似地,如果新根在原始右侧)根) . 现在,有两种情况:

  • 如果节点(新根在原始结构中的位置)是叶子,那么根本不用担心

  • 问题是当节点(新根在原始结构中的位置)是内部节点时,那么可以做什么?

3 回答

  • 0

    在一般情况下,您的算法需要以子树旋转的形式执行一系列树操作(如@ Quicky的答案中所述) .

    该算法应如下所示:

    • 虽然node_to_be_root不是整个树的根:

    • 旋转子树,其中node_to_be_root是枢轴,其父节点是子树的根(在此旋转之后,node_to_be_root将成为子树的根) .

  • 0

    对于案例2,您需要执行树旋转,如here所述

  • 0

    这是我能想到的算法

    • 创建一个内容与节点相同的新节点(必须成为新节点)

    • 将新节点内容与当前根节点进行比较 .

    2.1 . 如果它更大,那么将当前节点作为它的左子项,否则为右子项

    2.2还根据条件1将当前根节点的另一个子节点作为新节点的子节点

    • 删除我们在步骤1中为其复制的其他节点

    To delete the node here is the algo

    • 要删除的节点是leaf:只需从树中删除即可 .

    • 要删除的节点只有一个子节点:将子节点复制到节点并删除子节点

    • 要删除的节点有两个子节点:查找顺序(这里表示查找要删除节点的右子节点的最后一个左子节点)节点的后继节点 . 将inorder继承者的内容复制到要删除的节点,然后最终删除最后一个左子节点 .

    http://quiz.geeksforgeeks.org/binary-search-tree-set-2-delete/更好地解释删除节点

相关问题