2013-08-19 4 views
0

Я немного потрудился с PHP, пытаясь изучить его потенциал, поэтому я попытался выяснить, могу ли я реализовать двоичную древовидную структуру. Вот код:PHP - рекурсивное двоичное дерево

class Node{ 
    public $leftNode; 
    public $rightNode; 
    public $value; 
    public function Node($value){ 
     $this->value = $value; 
    } 
} 

class binTree{ 
    public function inserter(Node $node, $value){ 
     if($value < $node->value){ 
      if($node->leftNode != null){ 
       inserter($node, $value); 
      } 
      else{ 
       $node->leftNode = new Node($value); 
      } 
     } 
     else if($value > $node->value){ 
      if($node->rightNode != null){ 
       inserter($node, $value); 
      } 
      else{ 
       $node->rightNode = new Node($value); 
      } 
     } 
    } 
} 

Теперь по какой-то причине, когда я пытаюсь вызвать функцию INSERTER внутри себя (то есть вставки ($ узел, значение $), я получаю эту ошибку: Fatal error: Call to undefined function inserter(). Так что я пытался ссылаться на него с помощью $ это и даже binTree :: без удачи я получаю Fatal error: Using $this when not in object context и Fatal error: Allowed memory size of 134217728 bytes exhausted ошибки соответственно Может кто-нибудь объяснить, что происходит

ответ

0

я подозреваю, ваша проблема заключается в следующем:..?

PHP конструктор работает таким образом

public function __construct() 
{ 

} 

(по сравнению с C#, как синтаксис, который вы используете)

0

Попробуйте это:

<?php 
class Node{ 
    public $leftNode; 
    public $rightNode; 
    public $value; 

    // changed the constructor name from "Node" to "__construct" 
    public function __construct($value){ 
     $this->value = $value; 
    } 
} 

class binTree{ 
    public function inserter(Node $node, $value){ 
     if($value < $node->value){ 
      if($node->leftNode != null){ 
       // added "$this->" 
       $this->inserter($node, $value); 
      } 
      else{ 
       $node->leftNode = new Node($value); 
      } 
     } 
     else if($value > $node->value){ 
      if($node->rightNode != null){ 
       // added "$this->" 
       $this->inserter($node, $value); 
      } 
      else{ 
       $node->rightNode = new Node($value); 
      } 
     } 
    } 
} 

$binTree = new binTree(); 
$binTree->inserter(new Node('foo'), 'bar');