@neon4544

Как получить даты всех дочерних объектов бинарного дерева?

вот дерево
R6IGg.png
Дамп
rvNQ7.png
Я пробую вот так (getChil - это уже кусок дерева, если он присутствует в дереве с данной цифрой.)
public function getChil($node)
    {

        if (!empty($node->data)){
            array_push($this->arr, $node->data);
        }

        if (!empty($node->left)){
            $this-> getChil($node->left);
        }

        if (!empty($node->right)){
            $this-> getChil($node->right);
        }

        return $this->arr;
    }


Суть такова что я указываю цифру, и если она есть в дереве то должна вернуть все дочерние цифры.Моя реализация возвращает только цифры левой стороны, кто может подсказать проблему? Буду искренне благодарен...
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
У вас корректный код:
sandbox.onlinephpfunctions.com/code/00ed97cf62c568...

<?php

class Node{
  private $arr = [];
  
  public function getChildren($node)
    {

        if (!empty($node->data)){
            array_push($this->arr, $node->data);
        }

        if (!empty($node->left)){
            $this->getChildren($node->left);
        }

        if (!empty($node->right)){
            $this->getChildren($node->right);
        }

        return $this->arr;
    }  
}

$node =  createNode(
    6 . '_base', 
    createNode(7 . '_right'),
    createNode(8 . '_left',
        createNode(81 . '_left'),
        createNode(82 . '_right',
           createNode(821 . '_right', 
                null,  
                createNode(824 . '_left') 
           )
          
        )
    )
);

function createNode($data, $right = null, $left = null) {
    $obj = new stdClass();
    $obj->data  = $data;
    $obj->right  = $right;
    $obj->left  = $left;
    return $obj;
}
    
var_dump((new Node)->getChildren($node));

// [
//  "6_base"
//  "8_left"
//  "82_right"
//  "821_right"
//  "824_left"
//  "81_left"
//  "7_right"
// ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы