gpt4 book ai didi

C++ - 试图创建一个指向节点内指针(由另一个节点指向)的指针,对吗?

转载 作者:搜寻专家 更新时间:2023-10-31 02:04:25 24 4
gpt4 key购买 nike

#include<iostream>
using namespace std;

enum Color { black, red };

struct node {
public:
int key;
Color color;
node *left, *right, *parent;
};

class RBT {
public:
node nil;
node *root = new node;
RBT() {
nil.color = black;
root = &nil;
}

void left_rotate(node *x) {
node *y = x->right;
if (y->left == &nil) {}
}
};

int main()
{
RBT t;
cout << "t color is: " << t.root->color;
}

基本上我正在尝试编写一个红黑树数据结构,但我仍然对指向类对象中的指针感到非常困惑。

rotate函数是要在以后的函数中用到的,现在还不能真正用到。但是,当我已有的代码无法正常工作时,继续编写更多代码是没有意义的。

另一个重要的一点:没有其他节点指向的所有节点都将指向树的“nil”成员。所以这就是我要在函数中测试的内容,但我认为它做得不对。

最佳答案

enum class Color { black, red };

struct node {
static node nil; // so nil can be used in the constructor of node

int key;
Color color;
node *parent;
node *left;
node *right;

// Use this constructor for new nodes. Parameters you don't provide
// have defaults.
node(int key = 0, Color color = Color::black,
node *parent = &nil, node *left = &nil, node *right = &nil)
: key{ key }, color{ color }, parent{ parent }, left{ left }, right{ right }
{}
};

node node::nil;

struct RBT {
node root; // please, no new without purpose

void left_rotate(node *x) {
node *y = x->right;
if (y->left == &node::nil) {
// whatever
}
}
};

您可能想查找 std::unique_ptr<>std::shared_ptr<>

此外,

cout << "t color is: " << t.root->color;

如果不写 operator<< 就无法工作这需要 std::ostream&和一个 Color :

std::ostream& operator<<(std::ostream &os, Color const &color)
{
if(color == Color::black)
return os << "black";
return os << "red";
}

关于C++ - 试图创建一个指向节点内指针(由另一个节点指向)的指针,对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53512288/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com