【问题标题】:Binary Search Tree; Self Organizing Search/Rotation C++二叉搜索树;自组织搜索/旋转 C++
【发布时间】:2015-04-01 18:09:03
【问题描述】:

对于我的项目,我将创建一个自组织二叉搜索树。我已经成功创建了 BST,但由于某种原因,我不太清楚如何实现组织部分。

更具体地说, 当我搜索一个值时,我要增加它的搜索计数。一旦搜索计数等于“阈值保持值”(通过构造函数设置),我将搜索到的节点向上旋转一个。

我相信我可以弄清楚如何执行旋转,但我的问题在于整数变量 searchCountthreshVal。出于某种原因,我无法弄清楚如何让 searchCount 仅随着搜索的值递增,并在我搜索新值时重置

例如: 我的 BST 中有“1 2 3 4 5”。我搜索值“3”,找到它,将搜索计数增加到 1。 然后,我执行另一个搜索,这次是在值“5”上。然后 searchCount 变量再次递增到 2,此时它应该为 1,因为我搜索了不同的值。

这是我的搜索功能。这是一个很大的 .cpp 文件,所以我只包含一个函数。

template <typename T>
bool BST<T>::contains(const T& v, BSTNode *&t)
{
    if (t == nullptr)
        return false;
    else if(v < t->data)
        return contains(v, t->left);
    else if(t->data < v)
        return contains(v, t->right);
    else{

        if(t->right == nullptr)
            return true;
        /*
          Problem lies in the following segment, I just added the little
          rotation portion to try and get something to work for testing
          purposes. The problem still lies with threshVal and searchCount
         */
        if (searchCount == threshVal){
            BSTNode *temp = t->right;
            t->right = temp->left;
            temp->left = t;
            t = temp;

            if(t == root)
                searchCount = 0;
        }
        return true;
    }
}

如果我需要向你们提供更多信息,或者添加 .cpp 文件的其余部分,请告诉我。谢谢!

【问题讨论】:

  • 我建议你在互联网上搜索“平衡二叉树”。这可能非常接近您想要实现的目标。

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


【解决方案1】:

我无法添加评论,但您是否尝试为每个节点赋予自己的 int 计数?

示例:

struct treeNode
    {
        treeNode* left;
        treeNode* right;
        T data;
        treeNode() {left = NULL; right = NULL;};
        treeNode(const T&v, treeNode* l, treeNode* r){data = v; left = l;  right = r;};
int count = 0;
    };

然后在进行搜索时增加该节点的单个计数?

【讨论】:

  • 然后当搜索到 5 并找到你增加节点的计数。当该计数等于计数阈值时,旋转它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多