我使用根指针构建了二叉树。
是不是所有函数都应该更改根指针,因为我声明它是全局的?我如何实现这一目标?
由于
//伪代码(左,右指针在其他地方声明)
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
}
答案 0 :(得分:3)
这是因为您尚未在代码中为root
分配有效地址。
它应该指向一个有效的节点:
void BST::CreateRoot()
{
root = new (std::nothrow) Node;
}
在C ++中,当你想使用“全局变量”时,你应该使用unnamed namespace。好处是它可以防止名称冲突,这些冲突很容易被全局变量引入。
namespace
{
Node * root = NULL;
}
如果你用C编码,我最终会在这里。但是既然你正在使用C ++,那还有一件事。
你应该尽力avoid using global variables,特别是当你有很多相互依赖的时候。通常,您可以创建单例类。
但我不认为你使用单身人士的情况很复杂。只需在函数中添加一个额外的输入参数即可指示您要操作的节点。
// @param1(node) can be root or whatever node you want
Node * BST::BuildTree(Node *node, int label)
{
node->left = changed;
node->right = changed;
}