【问题标题】:Store all the node pointers in an array of pointers for Binary Search Tree将所有节点指针存储在二叉搜索树的指针数组中
【发布时间】:2016-09-24 12:24:05
【问题描述】:

最近我试图操纵二叉搜索树并被困在这里。我想要一个数组(指针数组),我想在其中按顺序存储二叉搜索树的每个节点的指针。我不需要每个节点的值我需要指针,以便我可以访问它们的值,左子树和右子树。我所做的是

struct node{
int key;
struct node *left, *right;
};

node **arr;
int x=0;

void inorder(struct node *root){
if (root != NULL){
    inorder(root->left);

    //cout<<"X : "<<x<<endl;
    arr[x] = root;
    x++;
    printf("%d \n", root->key);
    inorder(root->right);
}
}

请帮忙。谢谢。

【问题讨论】:

  • 看起来不错。怎么了?
  • 问题是当我使用 arr[i]->value 时会报错。
  • 什么样的错误?它可能应该是 arr[i]->Key 虽然...
  • 我正在使用 Dev C++,它显示了一个错误,例如“[Error] base operand of '->' has non-pointer type 'node'”
  • 错误信息似乎提示 arr[i].key,但这似乎与您发布的代码不一致。

标签: pointers data-structures tree binary-tree binary-search-tree


【解决方案1】:

你可以这样做,但是如果节点指针的排序数组满足你的需要,那么你就不需要二叉搜索树:你可以对数组执行二叉搜索。这种数据结构具有与树相同的访问速度(甚至可以稍微快一些,因为数据在内存中紧密打包)并且内存效率非常高。但是插入新数据的成本很高:o(n)。因此,如果预期有许多插入,则此解决方案不合适。但是在这种情况下,通过维护该排序数组,您将失去树结构的所有好处。

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 2019-03-12
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多