最近我试图操纵二叉搜索树并陷入困境。我想要一个数组(指针数组),我想在其中按顺序存储二进制搜索树的每个节点的指针。我不需要每个节点的值我需要指针,以便我可以访问它们的值,左子树和右子树。我所做的是
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);
}
}
请帮忙。感谢。
答案 0 :(得分:0)
您可以这样做,但如果排序的节点指针数组满足您的需求,那么您不需要二进制搜索树:您可以对阵列执行二进制搜索。这种数据结构具有与树相同的访问速度(甚至可以稍快一些,因为数据紧密地存储在内存中)并且内存效率非常高。但是插入新数据代价高昂:o(n)。因此,如果需要多次插入,则此解决方案不合适。但在这种情况下,通过维护排序的数组,您将失去树结构的所有好处。