Notice: Undefined index: valorDireita in C: xampp htdocs Anexus arvoreBinariaAnexus class arvore.class.php on line 47

Asked

Viewed 32 times

-1

My code creates a binary tree that is created with an array of random items and mounts them by sending them to the right or left of the previous number as a general rule of tree creation.

At the execution I have received two errors and I cannot know what is happening. The errors are:

Notice:  Undefined index: valorDireita in C:\xampp\htdocs\Anexus\arvoreBinariaAnexus\class\arvore.class.php on line 47

and

Notice:  Undefined index: valorEsquerda in C:\xampp\htdocs\Anexus\arvoreBinariaAnexus\class\arvore.class.php on line 31

index php.

<!DOCTYPE html>
<html lang="pt">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Arvore Binária</title>
</head>

<body>
    <h1>Árvore Binaria</h1>
    <h2>Random de 10 numeros, de 1 a 100</h2>
    <h2>Sistema de Indicação</h2>
    <?php

        include 'class/arvore.class.php';
        include 'class/no.class.php';

        $no1 = New No();
        $arvore = New Arvore();

      //  echo '<pre>';

        $i = 1;
        while ($i <= 10) 
        {
            $i++;
            $arvore->inserir($no1, random_int(1, 100));
        }

    ?>

    <h2>Totais</h2>
    <?php

        echo "<br>Quantidade da Esquerda = " . $valorEsquerda;
        echo "<br>Total de pontos da Esquerda = " . $valorEsquerda * 200;

        echo "<br><br><br>";

        echo "<br>quantidade da Direita = ".$valorDireita -= 1;
        echo "<br>Total de pontos da Direita = " .$valorDireita * 100;

        echo "<br><br><br>";

    ?>
<!--
    <h2>Estrutura do nó</h2>
    <?php

        print_r($no1);

    ?>
-->
</body>

</html>

no.class.php

<?php
class No {

    public $raiz;
    public $esquerda;
    public $direita;
    public $valor;

    public function __construct($valor = ' ') {
        if ( $valor != ' ' && !is_null($valor) ) {
            $this->valor = $valor;
        }
    }
}

tree.class.php

<?php

class Arvore {

    public $valorDireita;
    public $valorEsquerda;

    public function inserir($node, $valor) {

        $i = 0;
        if ($i = 0) {

            echo "Inserindo Raiz" . $valor . "<br>";
            $node->raiz = new No($valor);
            $i++;

        // Verifica se a árvore já foi criada
        } elseif ($node != NULL) {

            // Verifica se o valor a ser inserido é menor que o do nodo corrente da árvore, se sim vai para a subarvore esquerda
            if ($valor < $node->valor) {

                // Se tiver elemento no modo esquerdo continua a busca
                if ($node->esquerda != NULL) {

                    $this->inserir($node->esquerda, $valor);

                } else {

                    // se nodo esquerdo vazio insere o novo modo aqui e adiciona 200
                    echo "Inserindo " . $valor . " a esquerda de " . $node->valor . "<br>";
                    $node->esquerda = new No($valor);
                    $GLOBALS["valorEsquerda"] += 1;

                }    
            // Verifica se o valor a ser inserido é maior que o nodo corrente da árvore, se sim vai para subarvore direta
            } elseif ($valor > $node->valor) {

                // Se tiver elemento no modo direto continua a busca
                if ($node->direita != NULL) {

                    $this->inserir($node->direita, $valor);

                } else {

                    // Se nodo direito vazio insere o novo modo aqui e adiciona 100 
                    echo "Inserindo " . $valor . " a direita de " . $node->valor . "<br>";
                    $node->direita = new No($valor);
                    $GLOBALS["valorDireita"] += 1;
                }
            }
        }
    }
}

1 answer

-1


I ran your code here on the computer, and I did not understand very well what the problem it is running right, the error in question is because the variable $Node->value you use to display in the loop starts empty, note that in the image the first line has "Inserting 81 to the right of ", that is you inserted 81 and the left of it had nothing in the variable $Node->value so soon after it displays an error, it is the same thing in the first insertion on the right, right down in the second error, you inserted but the left had nothing in the variable $Node->value then PHP displays this error, but that doesn’t mean your code is wrong.

You can solve this by adapting to your business rule there in the.class.php tree an IF conditional that if it displays a different message the first time $Node->value is empty, something like.. if ($node->valor = null) { echo "Inserindo " .$valor. "
"; }

inserir a descrição da imagem aqui

Browser other questions tagged

You are not signed in. Login or sign up in order to post.