我想按照它实际在C中看的方式打印B + Tree的键。例如,以下表格
| 12 |20| 30|
5|9|11| |12|17|_| |20|27|26| |30|-|-|
上面的树是有序的(扇出)4。顶层节点是树节点。任何算法或伪代码都将受到高度赞赏。
修改
数据结构我正在实现树。以及实现树的代码。当我尝试打印树时,我会在线上出现分段错误
模块 Enqueue(tempNode->pointers[i]);
printBplus(root)
typedef struct bplus{
void ** pointers; /*These are the array of pointers that each tree node contains*/
int * keys; /*These are the array of keys in each tree node*/
struct bplus * parent; /*This the pointer to the parent tree node */
bool is_Leaf; /*To check if the node is leaf*/
int num_Keys; /*This keeps track the number of active keys in the node */
struct bplus * next ; /*This is the pointer to next level tree,used for queuing and dequeing node*/
} *bplus, bplus_node;
入队和出队:
void Enqueue(bplus a){
bplus bplusTemp;
if (queue == NULL) { //bplus queue=NULL is global variable
queue = a
queue->next = NULL;
}
else {
bplusTemp = queue;
while(bplusTemp->next != NULL) {
bplusTemp = bplusTemp->next;
}
bplusTemp->next = a;
bplusNew->next = NULL;
}
}
bplus Dequeue( void ) {
bplus bplusTemp = queue;
queue = queue->next;
bplusTemp->next = NULL;
return bplusTemp;
}
打印模块
void PrintBplus(bplus root){
int i;
bplus tempNode;
queue = NULL;
Enqueue(root); /*It enques the root*/
if(root === leaf)
print the keys associated with it
while(queue != NULL){
tempNode = Dequeue();
for(i=0; i < tempNode->num_Keys; i++)
printf("%d,",root->keys[i]);
if(tempNode->is_Leaf == false){
for(i=0; i <= tempNode->num_Keys; i++)
Enqueue(tempNode->pointers[i]);
}
}
答案 0 :(得分:3)
答案 1 :(得分:1)
我假设通过“实际看起来的方式”,你的意思是一个漂亮的图表,就像他们如何在教科书中打印b-tree。
如果您想在最常规的级别解决问题,那么按照实际看起来的方式打印树是一个非常非常重要的问题。问题包括:
我花了一些时间在我的数据结构课程中工作,但从未达到完全令人满意的解决方案。