链表树执行过程中出现错误

An error occurs during the implementation of the linked list tree

enter code here

#include <stdio.h>
#include <stdlib.h>
typedef struct _node {
   int data;
   struct _node* rightChild;
   struct _node* leftChild;
}Node;


Node* create(int data) { // create node function
   Node* node = (Node*)malloc(sizeof(node));
   node->rightChild = NULL;
   node->leftChild = NULL; 
   node->data = data;
   return node;
}

void Inorder(Node* ptr) { // travel
   if (ptr) 
   {
       printf("%c ", ptr->data);
       Inorder(ptr->leftChild);
       Inorder(ptr->rightChild); 
   }
 }
int main(void)
{
   Node* node[300];
   for (int i = 1; i < 300; i++) {
       if (i == 1) {
           node[i] = create(i);
       }
       else {
           if (i % 2 == 0) {
               node[i / 2]->leftChild = create(i);
           }
           else {
               node[i / 2]->rightChild = create(i);
           }
       }
   }
    Inorder(node[10]);
}

我想使用 Node* 数组实现二叉树,而不是一个一个地输入变量。但我在那个领域不断出错。感谢 advice.Which 部分 我需要修改以使该部分通过 for 语句实现吗?据我了解,node数组左右两部分都传值了,为什么会报错?

您分配给的唯一 node[i]node[1]。所有其他节点都通过 leftChildrightChild 字段链接。

您可以通过以下方式解决此问题,例如:

node[i] = create(i);
node[i / 2]->leftChild = node[i];

但我觉得这有点迂回,因为您现在在两个不同的地方拥有相同的数据——节点的句柄。

我猜你真正想要的是一个简单的节点结构数组,然后通过指针链接到数组中:

Node node[300] = {{0}};

node[1].data = 1;

for (int i = 2; i < 300; i++) {
    node[i].data = i;        

    if (i % 2 == 0) {
        node[i / 2].leftChild = &node[i];
    } else {
        node[i / 2].rightChild = &node[i];
    }
}

这将创建一个平面节点数组,其中节点像二叉树一样链接在一起。例如,node[1].leftChild 是指向 node[2] 的指针。您可以通过将 &node[1] 作为 head:

传递来使用常规树函数
Inorder(&node[1]);

(你说的Inorder其实就是pre-order遍历。)

优点是您不需要 create 和分配任何东西。当main结束时,整棵树都消失了,不需要free。 (它还消除了 create 中的错误,您只为指针分配 space,而不是为节点;它应该是 node = malloc(sizeof(*node));。)

也许这不是您想要的,但您代码中的错误来自于在未设置时访问 node[2]