0

我使用根指针构建了一个二叉树。

不是应该在所有函数中更改根指针,因为我声明它是全局的吗?我如何实现这一目标?

谢谢

//伪代码(在别处声明的左、右指针)

Node * root = new Node;


Node * BST::BuildTree(int label)
{
         root->left = changed;
        root->right = changed;
}

Node * BST::GetNode(int label)
{


  BTNode *ptr = root;

  cout << root->right;  //This gives me a seg fault since root is still NULL and not changed
}
4

1 回答 1

3

这是因为您没有root在代码中为 , 分配有效地址。

它应该指向一个有效的节点:

void BST::CreateRoot()
{
  root = new (std::nothrow) Node;
}

在 C++ 中,当你想使用“全局变量”时,你应该使用未命名的命名空间。好处是它可以防止全局变量很容易引入的名称冲突。

namespace
{
  Node * root = NULL;
}

如果您使用 C 进行编码,我会在这里结束。但是由于您使用的是 C++,所以还有一件事。

你应该尽量避免使用全局变量,尤其是当你有很多相互依赖的变量时。通常,您可以创建一个单例类。

但是我认为您的情况使用单例并不那么复杂。只需在您的函数中添加一个额外的输入参数来指示您要在哪个节点上进行操作。

// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
  node->left = changed;
  node->right = changed;
}
于 2012-04-23T02:30:41.470 回答