c++ - C++中使用全局指针实现红黑树

标签 c++ algorithm red-black-tree

我在以下代码中更新我的全局指针时遇到问题,

#include <iostream>

using namespace std;

struct RB{
    RB()=default;
    RB(int clr):color(clr) { }
    int color;
    RB *p,*left,*right;
    int key;
};

RB *Tnil=new RB(0);
RB *T=Tnil;
void insert(RB *T,RB *z)
{
    RB *y=Tnil;
    RB *x=T;
    while(x!=Tnil)
    {
        y=x;
        if(z->key<y->key)
          x=x->left;
        else
         x=x->right;
    }
    z->p=y;
    if(y==Tnil)
      T=z;
    else if(z->key<y->key)
      y->left==z;
    else
      y->right=z;
    z->right=Tnil;
    z->left=Tnil;
    z->color=1;
}

void print(RB *T)
{
    if(T==Tnil)
      return;
    print(T->left);
    cout<<T->key;
    print(T->right);
}

int main()
{
  for(int i=1;i<10;++i)
  {
    RB *x=new RB;
    x->key=i;
    insert(T,x);

  }
   print(T);
}

问题是,我的 insert 函数中的比较 y==Tnil 计算结果为 false,而我预期它为 true。结束该函数后,T 再次变为等于 Tnil,因此不会插入任何内容。有帮助吗?

最佳答案


你想更新全局T。
因此,您应该传递全局 T 的引用以插入:

替换

void insert(RB *T,RB *z)

void insert(RB * & T,RB *z)

(否则只会更新全局指针 T 的拷贝)

也如 ComicSansMS 所述在你的例子中

y->left==z 

应该替换为

y->left=z


最好的,

jack

关于c++ - C++中使用全局指针实现红黑树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17670287/

相关文章:

c++ - 列大小不同的二维数组的动态内存分配

给定开始/结束时间数组查找总空闲时间的算法

python - Borda的位置排名

red-black-tree - 红黑树插入问题为什么要旋转?

algorithm - 我可以在红黑树中插入未排序的数据吗?

c++ - 使用rapidxml循环遍历节点

c++ - 如何在 C++ 中实现 "virtual template function"

c++ - 将简单的 exe 运行到运行 microsoft/windowsservercore 的 docker 容器中

javascript - 检查数组JS中的序列

algorithm - 为什么RB-Tree不能是列表呢?