Создать двоичное дерево из стека? - PullRequest
1 голос
/ 11 ноября 2010

Мне поручено создать программу, которая превращает что-то вроде ((X+3)*(X+4)) в двоичное дерево, наряду с некоторыми другими функциями. До сих пор я взял входные данные и разбил их на два стека: один содержит операнды, другой - операторы.

На данный момент я определил стеки просто (поэтому они имеют только следующий узел и char value. Однако у меня, похоже, возникают проблемы с добавлением значений из стеков в мое дерево (поэтому, вероятно, проблема в определении дерева).

Мой стек определен следующим образом:

typedef struct node
{
    char value;
    struct node * nextnode;
} node;

Мое дерево определено:

typedef struct tree
{
    node * thisNode;
    struct tree *right, *left;
} tree;

Я не уверен насчет узла *, возможно, это должно быть что-то другое.

Я рассматривал простой случай 2 + 3 для начинающих. В этом случае корень дерева должен быть +, где слева будет 2, а справа - 3.

 +
/\
2 3

Как добавить что-то, находящееся в стеке, в мое дерево? Я пытался использовать

root->thisNode = operatorTop;

Где operatorTop - вершина стека операторов (определяется как node * operatorTop), но даже эта простая строчка, похоже, не соответствует действительности.

1 Ответ

4 голосов
/ 11 ноября 2010

Возможно, проблема в том, что вы не позвонили malloc(), чтобы зарезервировать место для root.

(Компиляторы сообщат о присвоении нулевого указателя, но при ошибке разыменования нулевой точки произойдет ошибка segfault.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...