Я работаю над кодом, который должен анализировать логическое выражение и загружать его в двоичное дерево.
Однако я не совсем понимаю, как мне начать добавлять узел в дерево.
Если у меня есть выражение вроде: a AND b или C, тогда я должен получить следующее дерево:
AND
a OR
b c
Я нашел следующий пример, который объясняет, как создать двоичное дерево, но не уверен, как я могу изменить это для работы с логическим выражением.
class btree
{
public:
btree();
~btree();
void insert(int key);
node *search(int key);
void destroy_tree();
private:
void destroy_tree(node *leaf);
void insert(int key, node *leaf);
node *search(int key, node *leaf);
node *root;
};
void btree::insert(int key)
{
if(root!=NULL)
insert(key, root);
else
{
root=new node;
root->key_value=key;
root->left=NULL;
root->right=NULL;
}
}
void btree::insert(int key, node *leaf)
{
if(key< leaf->key_value)
{
if(leaf->left!=NULL)
insert(key, leaf->left);
else
{
leaf->left=new node;
leaf->left->key_value=key;
leaf->left->left=NULL; //Sets the left child of the child node to null
leaf->left->right=NULL; //Sets the right child of the child node to null
}
}
else if(key>=leaf->key_value)
{
if(leaf->right!=NULL)
insert(key, leaf->right);
else
{
leaf->right=new node;
leaf->right->key_value=key;
leaf->right->left=NULL; //Sets the left child of the child node to null
leaf->right->right=NULL; //Sets the right child of the child node to null
}
}
}
Мне нужно несколько советов о том, как начать, так как я никогда не делал этого раньше.
Как должен выглядеть базовый алгоритм для функции вставки? Я не нашел подобных примеров в сети.
Задача ещё не решена.