This is my code for binary tree and all of its
операций в php:
<?php
class Node {public $ data;public $ leftChild;public $ rightChild;
открытая функция __construct ($ data) {$ this-> data = $ data;$ This-> LeftChild = NULL;$ This-> RightChild = NULL;} публичная функция disp_data () {echo $ this-> data;}
} // конец класса Node class BinaryTree {public $ root;// public $ s;публичная функция __construct () {$ this-> root = null;// $ this-> s = file_get_contents ('store');
} // функция для отображения дерева публичная функция display () {$ this-> display_tree ($ this-> root);
} открытая функция display_tree ($ local_root) {
if ($ local_root == null) return;$ This-> display_tree ($ local_root-> LeftChild);echo $ local_root-> data. ""; $ this-> display_tree ($ local_root-> rightChild);
} // функция для вставки новой функции узла. public ($ key) {$ newnode = new Node ($ key); if ($ this-> root == null) {$ this-> root = $ newnode; return;} else {$ parent = $ this-> root; $ current = $ this-> root; while (true) {$ parent =$ current; // $ this-> find_order ($ key, $ current-> data); if ($ key == ($ this-> find_order ($ key, $ current-> data))) {$ current = $current-> leftChild; if ($ current == null) {$ parent-> leftChild = $ newnode; return;} // end if2} // end if1 else {$ current = $ current-> rightChild; if ($ current== null) {$ parent-> rightChild = $ newnode; return;
} // end if1
} // end else} // конец цикла} // end else
}// конец функции вставки
// функция для поиска определенной публичной функции Node find ($ key) {$ current = $ this-> root; while ($ current-> data! = $ key) {if($ key == $ this-> find_order ($ key, $ current-> data)) {$ current = $ current-> leftChild;} else {$ current = $ current-> rightChild;} if ($ current ==null) return (null);
}
return($current->data);
} // завершаем функцию для поиска публичной функции delete1 ($ key) {$ current = $ this-> root;$ parent = $ this-> root;
$isLeftChild=true;
while($current->data!=$key)
{
$parent=$current;
if($key==($this->find_order($key,$current->data)))
{
$current=$current->leftChild;
$isLeftChild=true;
}
else
{
$current=$current->rightChild;
$isLeftChild=false;
}
if($current==null)
return(null);
}//end while loop
echo "<br/><br/>Node to delete:".$current->data;
//to delete a leaf node
if($current->leftChild==null&&$current->rightChild==null)
{
if($current==$this->root)
$this->root=null;
else if($isLeftChild==true)
{
$parent->leftChild=null;
}
else
{
$parent->rightChild=null;
}
return($current);
}//end if1
//to delete a node having a leftChild
else if ($ current-> rightChild == null) {if ($ current == $ this-> root) $ this-> root = $current-> LeftChild;иначе if ($ isLeftChild == true) {$ parent-> leftChild = $ current-> leftChild;} else {$ parent-> rightChild = $ current-> leftChild;}
return ($ current);} // конец else if1 // для удаления узла, имеющего rightChild else if ($ current-> leftChild == null) {if ($ current == $ this-> root) $ this-> root = $ current->RightChild;иначе if ($ isLeftChild == true) {$ parent-> leftChild = $ current-> rightChild;}
else {$ parent-> rightChild = $ current-> rightChild;}
return ($ current);}
// чтобы удалить узел, имеющий обоих потомков else {$ successor = $ this-> get_successor ($ current);if ($ current == $ this-> root) {$ this-> root = $ successor;
}
else if($isLeftChild==true)
{
$parent->leftChild=$successor;
}
else
{
$parent->rightChild=$successor;
}
$successor->leftChild=$current->leftChild;
return($current);
}
} // завершаем функцию удаления узла // Функция поиска узла-преемника public function get_successor ($ delNode) {$ succParent = $ delNode;$ Преемник = $ delNode;$ Темп = $ delNode-> RightChild;while ($ temp! = null) {$ succParent = $ successor;$ Правопреемника = $ темп;
$ Темп = $ TEMP-> LeftChild;
}
если ($ преемник! = $ delNode-> RightChild)
{
$ SuccParent-> LeftChild = $ successor-> RightChild;
$ Successor-> RightChild = $ delNode-> RightChild;
}
Возвращение ($ правопреемник);
}
// функция для поиска порядка двух строк
публичная функция find_order ($ str1, $ str2)
{
$ Str1 = strtolower ($ str1);
$ Str2 = strtolower ($ str2);
$ I = 0;
$ J = 0;
$p1=$str1[i];
$p2=$str2[j];
в то время (правда)
{
если (ог ($ p1)
return($str1);
}
else
{
if(ord($p1)==ord($p2))
{
$p1=$str1[++$i];
$p2=$str2[++$j];
continue;
}
return($str2);
}
} // конец пока
} // конец функции поиска порядка строк
публичная функция is_empty ()
{
если ($ this-> корень == NULL)
вернуться (истина);
еще
возвращать (ложь);
}
} // конец класса BinaryTree
?>