2013-08-15 4 views
0

У меня есть простой вопрос.Деревья выражений как двоичные деревья

Почему все деревья выражений моделируются как «Двоичные деревья», а не как «N ary trees»?

Есть ли причина, по которой выражение не может быть смоделировано с использованием N-арного дерева?

+0

Конечно, они могут ... но все n-арные деревья могут быть смоделированы как бинарные деревья, так зачем беспокоиться о дополнительной сложности? –

+0

Значит ли это, что деревья выражений также могут быть выполнены с использованием n-деревьев? Поскольку везде, где я читал о деревьях выражений, я вижу только примеры двоичных деревьев. – LPD

+0

Они могут быть, но в большинстве случаев это не обязательно, в зависимости от типов деревьев выражений, с которыми вы имеете дело. Если вам не нужно использовать n-арные деревья, тогда зачем беспокоиться? –

ответ

2

Есть несколько хороших причин, почему деревья выражений часто являются двоичным:

  1. Наиболее распространенные деревья выражений представляют арифметические операции (+, -, *, /) или логические предикаты (AND, OR, NOT, XOR). Существуют все двоичные (и унарные) операции, поэтому бинарные деревья имеют наибольший смысл. Вы могли иметь, например, n-ary +, но это просто усложняет ситуацию без уважительной причины.
  2. С более теоретической точки зрения, если у вас есть n-арное дерево, вы можете представить его, используя эквивалентное двоичное дерево, не теряя ничего. Использование п-арной + пример следующие деревья (одна п-ичных и один двоичный) можно считать тот же:

    +  + 
    /|\ /\ 
    a b c + c 
        /\ 
         a b 
    

С другой стороны, есть библиотеки, которые используют п-арные деревья выражений где они имеют смысл. Например, деревья выражений C# (из пространства имен System.Linq.Expressions) используют n-арные деревья для выражений вызова. Таким образом, выражение f(a, b, c) будет представлен в виде InvocationExpression который выглядит следующим образом:

f 
/|\ 
a b c 
0

Почему все деревья выражений моделируются как «Бинарные деревья», а не как «N ичных деревьев»?

Это не так. Внутренние узлы дерева выражений являются операторами, а операторы могут быть унарными, двоичными или тройными, по крайней мере, может быть, больше.

Есть ли причина, по которой выражение не может быть смоделировано с использованием N-арного дерева?

Они есть.

+0

Можете ли вы сказать, о чем говорят причины? – LPD

Смежные вопросы