0

我一直在尝试使用 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);
            }
        }
    }   
}

现在由于某种原因,当我尝试在其自身内部调用插入器函数时(即插入器($node,$value),我收到此错误:Fatal error: Call to undefined function inserter().所以我尝试通过 $this 甚至 binTree:: 引用它,但没有运气。我得到了Fatal error: Using $this when not in object contextFatal error: Allowed memory size of 134217728 bytes exhausted错误分别。谁能解释发生了什么?

4

2 回答 2

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');
于 2013-08-19T03:40:57.637 回答
0

我怀疑您的问题如下:

php构造函数以这种方式工作

public function __construct ()
{

}

(与您正在使用的类似 C# 的语法相比)

于 2013-08-19T03:07:40.863 回答