hackerrank php день 22 дерево бинарного поиска

У меня есть следующий код:

<?php
class Node{
public $left,$right;
public $data;
function __construct($data)
{
$this->left=$this->right=null;
$this->data = $data;
}
}
class Solution{
public function insert($root,$data){
if($root==null){
return new Node($data);
}
else{
if($data<=$root->data){
$cur=$this->insert($root->left,$data);
$root->left=$cur;
}
else{
$cur=$this->insert($root->right,$data);
$root->right=$cur;
}
return $root;
}
}
public function getHeight($root) {
$heightLeft = 0;
$heightRight = 0;

if ($root->left != null) {
$heightLeft = getHeight($root->left) + 1;
}
if ($root->right != null) {
$heightRight = getHeight($root->right) + 1;
}
echo "heightRigh is $heightRight\n";
echo "heightLeft is $heightLeft\n";

$ans = ($heightLeft > $heightRight ? $heightLeft : $heightRight);
return $ans;
}

}//End of Solution
$myTree=new Solution();
$root=null;
$T=intval(fgets(STDIN));
while($T-->0){
$data=intval(fgets(STDIN));
$root=$myTree->insert($root,$data);
}
$height=$myTree->getHeight($root);
echo $height;
?>

Когда я запускаю его с входами
1
1
это дает правильные результаты.

Но когда я запускаю его с входами
2
1
2

Я получаю ошибку:

Неустранимая ошибка PHP: вызов неопределенной функции getHeight () в C: \ git \ phpStudy \ CallingAFunction.php в строке 36

Неустранимая ошибка: вызов неопределенной функции getHeight () в C: \ git \ phpStudy \ CallingAFunction.php в строке 36

Я новичок в php и не могу понять, что я делаю неправильно. Спасибо.

1

Решение

Ответ очень прост. Короче говоря, ваша проблема заключается в следующем:

а) приводит к фатальной ошибке, как описано:

class Solution{
public function getHeight($a) {
if($a==true) {
return getHeight(false);
}
return "hello";
}
}

$a = new Solution();

echo $a->getHeight(true);

б) работает:

class Solution{
public function getHeight($a) {
if($a==true) {
return $this->getHeight(false);
}
return "hello";
}
}

$a = new Solution();

echo $a->getHeight(true);

Вам нужно обратиться к классу, если вы хотите вызвать функцию внутри класса. использование $this->,

В строке 36 у вас есть рекурсивный вызов функции для получения высоты. Функция не найдена. Следовательно, правильное решение:

<?php
class Node{
public $left,$right;
public $data;
function __construct($data)
{
$this->left=$this->right=null;
$this->data = $data;
}
}
class Solution{
public function insert($root,$data){
if($root==null){
return new Node($data);
}
else{
if($data<=$root->data){
$cur=$this->insert($root->left,$data);
$root->left=$cur;
}
else{
$cur=$this->insert($root->right,$data);
$root->right=$cur;
}
return $root;
}
}
public function getHeight($root) {
$heightLeft = 0;
$heightRight = 0;

if ($root->left != null) {
$heightLeft = $this->getHeight($root->left) + 1;
}
if ($root->right != null) {
$heightRight = $this->getHeight($root->right) + 1;
}
echo "heightRigh is $heightRight\n";
echo "heightLeft is $heightLeft\n";

$ans = ($heightLeft > $heightRight ? $heightLeft : $heightRight);
return $ans;
}

}//End of Solution
$myTree=new Solution();
$root=null;
$T=intval(fgets(STDIN));
while($T-->0){
$data=intval(fgets(STDIN));
$root=$myTree->insert($root,$data);
}
$height=$myTree->getHeight($root);
echo $height;
?>
0

Другие решения

Других решений пока нет …