将所有节点指针存储在二进制搜索树的指针数组中

时间:2016-09-24 12:24:06

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

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

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);
}
}

请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

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