【问题标题】:How to implement BST functions insert() and split() based upon rank?如何根据排名实现 BST 函数 insert() 和 split()?
【发布时间】:2021-02-20 20:31:26
【问题描述】:

我试图弄清楚如何实现 insert()(将元素插入到树中)、split()(将 r 级上的树拆分为 L 和 R 两棵树)的函数的代码。包含秩 = r 的 R。对于这个作业,我傻眼了。我相信我的插入代码正确,可以正常工作:

Node *insert(Node *T, int v, int r)
{
    if(T == nullptr)
    {
        return new Node(v);
    }
    int rank = T->left ? T->left->size : 0;
    
    if (r <= rank)
    {
        T -> left = insert(T -> left, v, rank);
    }
    else
    {
        T -> left = insert(T -> left, v, r - rank - 1);
    }
    fix_size(T);
    return T;
}

对于我的 split() 函数,我几乎没有任何有用的东西。有人可以解释如何完成这两个功能的算法吗?谢谢!

【问题讨论】:

    标签: c++ c algorithm binary-search-tree


    【解决方案1】:

    我假设我们在这里处理的是不平衡的 BST(平衡使这更难)。

    拆分空树很简单(return (null, null))。

    给定一个非空树 T,将根的秩与 r 进行比较。如果小于,则递归地拆分右孩子以获得(R

    这有一个巧妙的迭代实现,带有Node** 指针,我将留作练习。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-06
      • 2021-07-14
      • 2021-09-13
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多