【问题标题】:Add nodes to binary search tree c++将节点添加到二叉搜索树c ++
【发布时间】:2013-07-09 18:25:01
【问题描述】:

我正在构建一个二叉搜索树。现在我在向树中添加节点时遇到问题。

void BinaryTree::add(int value, Node* node) {
    if(!node)
        node = new Node(value);
    else if(node->key < value)
        this->add(value, node->rightNode);
    else if(node->key > value)
        this->add(value, node->leftNode);
}

当我调用时,这段代码似乎不起作用:

BinaryTree test;
test.add(4, test.root);
test.add(1, test.root);
test.add(5, test.root);
test.add(2, test.root);
test.add(3, test.root);
test.add(7, test.root);
test.add(6, test.root);

在第一次 add 调用之后,树“test”的根仍然是空的。 我该如何更改代码,以便在我调用 add 并且节点转到树的正确位置时更新它? 非常感谢!

【问题讨论】:

  • 您可以通过引用传递Node *
  • 好的,谢谢! @ShafikYaghmour

标签: c++ binary-search-tree


【解决方案1】:

您在此处按值传递 Node *

void BinaryTree::add(int value, Node* node) {

一种解决方案是通过引用传递:

void BinaryTree::add(int value, Node *& node) {
                                      ^

如果您按值传递,该函数只是接收Node * 的副本,因此对它的任何修改都不会反映在调用代码中。

您可能还想考虑当value 等于key 时会发生什么。

【讨论】:

  • 谢谢!我还有一个问题,当我按值传递指针时,复制的指针没有指向同一个对象?
  • @Ra1nWarden 是的,它将指向同一个对象,因此如果您修改它指向的对象,这些更改将被反映,但对指针本身的修改不会。
  • 我明白了。是的,我现在假设键是不同的。
【解决方案2】:

您递归地调用 add 函数,但我没有看到您实际上将 leftNode 或 rightNode 分配给传入的节点。

【讨论】:

  • leftNode 或 rightNode 将在下一次递归的基本情况下添加 - 如果节点参数已正确声明
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多