Как сгенерировать все возможные деревья двоичных выражений? - PullRequest
0 голосов
/ 21 июня 2020

Я хочу получить все выражения, которые можно объединить четырьмя числами и четырьмя операциями. Диапазон чисел - [1, 13] Оператор может быть одним из '+ - * /'

Название давало мне смутное представление вроде этого :

void gen_expression_tree(BiTree &t, int num)

    {

     for(int i = 1; i < num; i++) {      

         t->data = one of  “+-*/”
     
         gen_expression_tree(t->lchild, i);

         gen_expression_tree(t->rchild, num - i);
     }

  }

при num = = 1 это будет число, в противном случае операция. Ожидаемый результат:

(1+(2+(3+4)))
(1+(2+(4+3)))
(1+(2+(3-4)))
(1+(2+(4-3)))
(1+(2+(3*4)))
(1+(2+(4*3)))
(1+(2+(3/4)))
(1+(2+(4/3)))
(1+(3+(2+4)))
(1+(3+(4+2)))
(1+(3+(2-4)))
(1+(3+(4-2)))
(1+(3+(2*4)))
(1+(3+(4*2)))
(1+(3+(2/4)))
(1+(3+(4/2)))
(1+(4+(2+3)))
(1+(4+(3+2)))

Я не совсем понимаю, как циклы и рекурсия могут генерировать выражения, я хочу узнать несколько более подробных идей。

...