0

我为我的程序构建了一个二叉搜索树。这是我的代码:

struct node {
    int steps;
    int x;
    int y;
    struct node *left;
    struct node *right;
}*head;

typedef  struct node *Node;

Node createStepsBinaryTree(Node head, int newStepsInt, int x, int y){
    if (head == NULL) {
        head = (Node)malloc(sizeof(Node));
        if (head==NULL) {
            return NULL;
        }else{
            head->steps = newStepsInt;
            head->x = x;
            head->y = y;
            head->left = head->right = NULL;
        }
    }else{
        if (head->steps > newStepsInt) {
            head->left = createStepsBinaryTree(head->left, newStepsInt, x, y);
        }else{
            head->right = createStepsBinaryTree(head->right, newStepsInt, x, y);
        }
    }
    return head;
}

这就是我从另一个递归函数调用这个函数的方式:

Coor insertDataToTree(Node stepsTree,Coor root, int x, int y, int map[length][length], int steps){

    steps++;
    stepsTree = createStepsBinaryTree(stepsTree, steps, x, y);
    .
    .
    .

这就是我将它输入到该递归函数的方式:

Node stepsTree = NULL;

root = insertDataToTree(stepsTree,root, startPoint.x, startPoint.y, map, startPoint.steps);

现在对于我遇到的主要问题:它在前两次运行时运行良好,但随后它第三次通过该树中的两个结构运行,但是当它应该给自己一个 NULL 结构时,它给出了一些东西真的很接近 NULL。它显示(节点 *)0x0000000000000000000001。

有谁知道我怎样才能阻止这种疯狂?:)

4

2 回答 2

1

正如@wildplasser 所指出的,您为节点分配了足够的空间,这是一种指针类型。您要么需要更改代码以使 Node 成为结构,要么在 malloc 中分配 sizeof(struct node) 字节。

我强烈建议您不要将指针隐藏在 typedef 中 - 这是几个如何导致问题的示例之一。

于 2013-06-22T17:35:00.813 回答
0
head = (struct node*)malloc(sizeof(struct node))

尽管 sizeof(*Node) 被大多数编译器接受。

于 2013-06-22T17:32:46.253 回答