Tworzenie drzewa i obliczenie jego wartości z ONP

0

Witam.
Mam problem polegający na tym, że zamieniam symboliczne wyrażenie arytmetyczne na postać odwrotnej notacji polskiej. Następnie chciałbym z tego ONP stworzyć drzewo binarne, a następnie obliczyć wartość zadanego wyrażenia. Sama zamiana na ONP działa poprawnie. Wyrażenie przekazywane do funkcji zamieniającej ją na drzewo binarne zawiera spacje, liczby wielocyfrowe oraz liczby z kropkami (floaty, double). Ma ktoś jakiś pomysł jak to rozwiązać?
Poniżej kod odpowiedzialny za zamianę ONP na drzewo binarne wyrażenia (nie wiem czy działa)
public class ExpressionTree
{
string data;
ExpressionTree left, right;

    public ExpressionTree CreateTree(string ONP)
    {
        ExpressionTree[] S = new ExpressionTree[100];                 // Stos
        int sp;                            
        ExpressionTree v;                        
        sp = 0;                           
        string liczba = "";

        for (int i = 0; i < ONP.Length; i++)    // Przetwarzamy wyrażenie ONP
        {
            v = new ExpressionTree();                

          //  v.data = ONP[i].ToString();  ------- tutaj nie wiem czy dobrze robię między innymi            

            if (ONP[i] == '+' || ONP[i] == '-' || ONP[i] == '*' || ONP[i] == '/' || ONP[i] == '^')
            {
                v.right = S[--sp]; 
                v.left = S[--sp]; 
            }
            else if ((Char.IsDigit(ONP[i]) || ONP[i] == '.'))
            {
                liczba = liczba + ONP[i];
            }
            else if (ONP[i] == ' ')
            {
                v.data = liczba;
                v.left = v.right = null; // Liść, nie ma synów
                liczba = "";
            }
            S[sp++] = v;                      // Węzeł umieszczamy na stosie
        }
        return S[sp - 1];                   // Zwracamy adres korzenia
    }
}
0
  1. Jak zamieniasz na ONP, to nie możesz od razu na drzewo?
  2. Jak zamieniasz na ONP, to po co na string? Jakbyś z tego zrobił kolejkę/listę, to zmiana na drzewo byłaby dużo prostsza...
  3. Czy funkcja może być rekurencyjna? To upraszcza sprawę.
  4. Samo obliczenie z ONP (w postaci kolejki) też będzie dużo prostsze, niż tworzenie drzewa i potem obliczanie...

1 użytkowników online, w tym zalogowanych: 0, gości: 1