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
}
}