无法将树节点分配到堆栈中

问题描述 投票:0回答:1
typedef struct tree_node{
    int table_node[4][4];
    struct tree_node* parent;
    struct tree_node* children[4];
}tree_node;

struct tree_node* new_Node(int **field, tree_node* parent){
    tree_node* newNode = (tree_node*)malloc(sizeof(tree_node));

    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            newNode->table_node[i][j] = field[i][j];
        }
    }

    newNode->parent = parent;
    
    for(int i = 0; i < 4;i++) {
        newNode->children[i] = NULL;
    }
    return newNode;
    
}

typedef struct Stack{
    int top;
    int capacity;
    tree_node* nodes;
}Stack;

struct Stack* new_Stack(){
    struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));
    stack->capacity = 1000;
    stack->top = -1;
    stack->nodes = (tree_node*)malloc(stack->capacity * sizeof(tree_node));
}

我创建了一棵树和一个堆栈来保存它们,但我在下面的推送函数中收到一条错误消息:

void push(struct Stack* stack, tree_node* node){
    if(is_Full(stack))
        return;
    stack->nodes[++stack->top] = node;
}

消息内容为:“无法将“tree_node *”类型的值分配给“tree_node”类型的实体”,并且其在行中的等号处显示为错误: 堆栈->节点[++堆栈->顶部] = 节点;

我该如何解决这个问题,是什么原因导致的?

c tree stack
1个回答
0
投票

stack->nodes = (tree_node*)malloc(stack->capacity * sizeof(tree_node));
创建一个树节点数组。 `

stack->nodes[++stack->top]
则为树节点,而不是树节点指针。

void push(struct Stack* stack, tree_node* node)
中,你可以看到node实际上是一个指向节点的指针。

要么将

stack->nodes
更改为指针数组,以便可以直接使用
stack
结构体释放指针。

或者您可以使用

node
取消引用
push
中的
stack->nodes[++stack->top] = *node
但请记住,您将如何从原始节点释放内存,因为堆栈是一个副本。

您似乎想将堆栈更改为结构指针数组。

希望这有帮助:)

© www.soinside.com 2019 - 2024. All rights reserved.