L'évaluation de l'expression des arbres

Skiena du livre de l'Algorithme contient la question suivante:

1) d'Évaluer l'expression donnée en arbre binaire en O(n) le temps, étant donné les n noeuds.

2) Évaluer l'expression que DAG en O(n+m) temps, compte tenu de n nœuds et m arêtes dans le DAG.

L'évaluation de l'expression des arbres

Je pourrais penser à un moyen pour la première question:

evaluate(node) {
     if(node has children){
          left_val = evaluate(node->left);
          right_val = evaluate(node->right);

          //find operation symbol for node and use it as
          //val = left_val operation right_val

          return val;
     }
     else {
          return node_value;
     }
}

Puisque nous rendre visite à chaque nœud une fois, il faudra du temps O(n) fois.

Puisque le livre n'a pas de solutions, quelqu'un peut s'il vous plaît dites si c'est correct ?

Aussi n'importe qui peut proposer une solution pour la deuxième question.

Grâce.

OriginalL'auteur Jake | 2012-05-26