Php 递归二叉树

Php 递归二叉树,php,binary-tree,binary-search-tree,Php,Binary Tree,Binary Search Tree,我一直在用PHP探索它的潜力,所以我试着看看是否可以实现一个二叉树结构。代码如下: class Node{ public $leftNode; public $rightNode; public $value; public function Node($value){ $this->value = $value; } } class binTree{ public function inserter(Node $node,

我一直在用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);
            }
        }
    }   
}
类节点{
公共节点;
公共$rightNode;
公帑价值;;
公共功能节点($value){
$this->value=$value;
}
}
类二叉树{
公共函数插入器(节点$Node,$value){
如果($value<$node->value){
如果($node->leftNode!=null){
插入器($node,$value);
}
否则{
$node->leftNode=新节点($value);
}
}
else if($value>$node->value){
如果($node->rightNode!=null){
插入器($node,$value);
}
否则{
$node->rightNode=新节点($value);
}
}
}   
}

现在由于某种原因,当我尝试在其内部调用插入器函数(即插入器($node,$value))时,我得到了以下错误:
Fatal error:call to undefined function inserter().
因此我尝试通过$this甚至binTree::引用它,但运气不佳。我得到了
致命错误:在不在对象上下文中时使用$this
致命错误:允许的内存大小分别为134217728字节。
错误。有人能解释发生了什么吗?

我怀疑您的问题如下:

php构造函数就是这样工作的

public function __construct ()
{

}
(vs C#与您正在使用的语法类似)

尝试以下方法:

<?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');