2013-08-19 196 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); 
      } 
     } 
    } 
} 

现在,出于某种原因,当我尝试调用它自己内部的插入功能(即插入($节点,$值),我得到这个错误:Fatal error: Call to undefined function inserter().所以,我想通过引用它$这甚至二叉树::没有运气,我得到分别Fatal error: Using $this when not in object contextFatal error: Allowed memory size of 134217728 bytes exhausted错误谁能解释发生了什么

回答

0

我怀疑你的问题如下:?

PHP构造以这种方式工作

public function __construct() 
{ 

} 

(VS 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');