У меня новое задание

Теперь хочу вывести дерево разбора, используя полученную польскую запись.
Придумал такой алгоритм:
Читаем Польскую запись сзада наперед:
Первый знак - всегда операция - помещаем в корень
Далее Читаем след исмвол:
1) операция:
а) Если предыдущий считанный символ - операция - поместить в Правое поддерево(ПП)
б) Если предыдущий считанный символ - буква
Функция SpuskLP:
Поднимаемся на уровень выше
Если ЛП = 0, то помещаем в ЛП
Иначе - Функция SpuskLP
2) Буква:
а) Пред. символ - операция:
Поместить в ПП
б) Пред сивол - буква:
Если ЛП = 0, то Поместить в ЛП
Иначе -
Фунцкия SpuskLP2:
Подняться На уровень выше
Если ЛП = 0, то поместить в ЛП
Иначе - SpuskLP2
-~{}~ 15.03.10 18:15:
Вопрос в следущем, читал про деревья в PHP - здесь они немного в другом представлении - как список, а нет ли каких-нибудь функций для работы с бинарными деревьями?
Или придется пользоваться стандартными функциями и выдумывать велосипед?
-~{}~ 15.03.10 18:32:
Возникла идея - создать класс Three, где
1) Вершина $V
$V1 - левое поддерево (Наследник Three)
$V2 - правое поддерево (Наследник Three)
$n - уровень
Т.е.
1) New Three
и т.д., правда если есть стандартная реализация - лучше воспользоваться ею, подскажите пожалуйста ...
-~{}~ 15.03.10 20:49:
PHP:
<?php
class Treenode {
public $Node;
public $LP;
public $PP;
public $U;
public $i;
public $simbol;
public function __construct($j, $simbol)
{
$Node = $simbol;
$LP=0;
$PP=0;
}
public function CreatePP()
{
$PP=1;
}
public function CreateLP()
{
$PP=1;
}
public function SpuskLP()
{
$a = 0;
if ($U[$j-3+$a]->LP=0)
{
$U[$j-3+$a]->LP=1;
} else
{
$a = 1;
SpuslLP;
}
}
public function SpuskLP2()
{
$a = 0;
if ($U[$j-2+$a]->LP=0)
{
$U[$j-2+$a]->LP=1;
$U[$j] = new TreeList($j, $simbol);
} else
{
$a = 1;
function Podspusk()
{
if ($U[$j-2-$a]->LP=0)
{
$U[$j-2-$a]->LP=1;
$U[$j] = new TreeList($j, $simbol);
} else
Podspusk();
}
}
}}
class Treelist {
public $Node;
public $simbol;
public $U;
public function __construct($j, $simbol)
{
$Node=$simbol;
}
public function CreatePP()
{
$PP=1;
}
public function CreateLP()
{ }
public function SpuskLP()
{}
public function SpuskLP2()
{}}
$i=0;
ini_set('display_errors',1);
error_reporting(E_ALL);
$formula='+/ed*-cba';
$dl=strlen($formula);
$simbol=substr($formula,$i,1);
$j=1;
$U[$j] = new Treenode($j, $simbol);
$predoper=1; // 1 - операция 2 - буква
for ($i = 1; $i <= $dl-1; $i++)
{
$j++;
$simbol = substr($formula,$i,1);
switch ($simbol)
{
case "+": case "-": case "/": case "*":
if ($Predoper=1)
{
$U[$j-1]->CreatePP();
$U[$j] = new Treenode($j, $simbol);
} else
{
SpuskLP;
$U[$j-1]->CreateLP();
$U[$j] = new Treenode($j, $simbol);
}
$predoper=1;
break;
case "a": case "b": case "c": case "d": case "e":
if ($Predoper=1)
{
$U[$j] = new TreeList($j, $simbol);
} else
{
SpuskLP2();
}
break;
$predoper=2;
}
}
for ($j=1; $j<10; $j++)
{
print ($U[$j]->Node);
}
?>
Что-то сделал, алгоритм пока можно не смотреть, ругается, что в строке 81: "Fatal error: Call to a member function CreatePP() on a non-object in H:\home\testfirst.ru\www\index.php on line 81". Насколько я понял он не создает вообще объекты класса, я первый раз с классами работаю в PHP, может я что не так делаю?