Я потратил много дней, пытаясь рекурсивно добавлять строки из префиксного выражения, например: + 1.5 * 13 2.5
внутри двоичного дерева. Я использую функцию strtok
для разделения элементов строки, но как мне добавить элементы в дерево?
Мой код очень похож на пример GeeksForGeeks: https://www.geeksforgeeks.org/building-expression-tree-from-prefix-expression/ , но здесь они только добавляют символы в качестве данных на узле.
typedef struct node {
char * data;
struct node *left, *right;
} node;
// Function to recursively build the expression tree
char* add(node** p, char* a)
{
// If its the end of the expression
if (*a == '\0')
return '\0';
while (1) {
char* q = "null";
if (*p == NULL) {
// Create a node with *a as the data and
// both the children set to null
node* nn = (node*)malloc(sizeof(node));
nn->data = *a;
nn->left = NULL;
nn->right = NULL;
*p = nn;
}
else {
// If the character is an operand
if (*a >= '0' && *a <= '9') {
return a;
}
// Build the left sub-tree
q = add(&(*p)->left, a + 1);
// Build the right sub-tree
q = add(&(*p)->right, q + 1);
return q;
}
}
}
int main()
{
node* s = NULL;
char a[] = "3.5 + 4.7";
// (...) tokens
add(&s, str);
return 0;
}
Большое спасибо за вашу помощь.