【问题标题】:Storing BST values into an array using index使用索引将 BST 值存储到数组中
【发布时间】:2017-07-09 14:57:23
【问题描述】:

我正在尝试创建一个使用 BST 将其值存储在数组中的函数。我有一个全局变量 index = -1;动态创建的数组,大小为 BST。

int index = -1;
struct treeNode{
    int value;
    treeNode *left;
    treeNode *right;
}

void treeTraversal(treeNode *node, int array[], int index){
    index++;
    if (node != nullptr){
        array[index] = node->value;
        treeTraversal(node->left, array, index);
        treeTraversal(node->right, array, index);
    }
}

它适用于一些具有这样结构的树

        6
    5
4

但它不适用于这样的结构

    3
2       4
            5

【问题讨论】:

  • 您是如何将值存储到树结构中的?
  • 我没有这是一个作业和我没有创建的代码的 int 主要部分
  • 我建议使用调试器单步调试您的代码,并观察index 参数的变化。检查这是否符合您的期望。
  • 我一直在检查代码并使用不同的测试用例对其进行测试,但是每当我更改某些内容时,另一个测试用例将起作用而另一个测试用例将失败
  • 您正在尝试通过反复试验来编写代码;这种方法有效,但速度极慢。您必须了解这些代码行的作用,然后才能希望它们正常工作。此外,您发布的代码不适用于第一棵树。 我强烈建议你在尝试这个之前先回去掌握更简单的练习。我建议编写可以复制数组的代码,然后编写可以遍历树打印值但不存储它们的代码,然后遍历并用计数器打印,然后这个任务。

标签: c++ arrays binary-tree binary-search-tree


【解决方案1】:

数组赋值应该在树遍历的中间

int index = 0;
struct treeNode{
int value;
treeNode *left;
treeNode *right;
}

void treeTraversal(treeNode *node, int array[], int *index){
if (node != nullptr){

    treeTraversal(node->left, array, &index);
    array[index++] = node->value;
    treeTraversal(node->right, array, &index);
    }
}

Tree Sort Tutorial

【讨论】:

  • 我试过了,它也适用于某些测试用例,但不适用于上面的第二种情况
  • 上面第二个树结构中没有存储最后一个元素
  • 您需要将指针传递给索引。你的声明应该是 void treeTraversal(treeNode *node, int array[], int *)
  • 但我的全局变量声明为 int index = -1;我怎样才能将它传递给参数?
  • 好的,您需要进行 3 处更改 a) 您的全局索引 =0 b)index++ 需要在数组 [索引] = 节点-> 值之后,因此您可以将此行写为数组 [索引++ ] = 节点-> 值; c) 如果您只将索引而不是指向索引的指针传递给遍历函数,那么当您从一个分支上来时,索引将被重置,因此您需要将指针传递给索引
猜你喜欢
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
相关资源
最近更新 更多