Vivek.anand34 Ответов: 2

Как найти уровень и количество детей в двоичном дереве


уважаемый друг,

Я должен разработать МЛМ-проект, я хочу рассчитать
1. Количество детей от каждого узла.
2. Найдите уровень узла.

1
/ \
2 3
/ \ / \
4 5 6 7

Например, тот. номер ребенка для "1" равен 6
Тот. нет. детей на '2' - это 2
Тот. номер ребенка для '4' равен 0
...........

Что я уже пробовал:

У меня есть такая таблица БД:

идентификатор ид_родительского_объекта ногу
--------------------
1 0
2 1 л
3 1 Р
4 2 л
5 2 Р
6 3 л
7 3 р

Я попробовал эту функцию она делает ошибку:
Создать get_counts функция(int значение) возвращает значение типа int
НЕ ДЕТЕРМИНИРОВАННЫЙ
ЧТЕНИЕ ДАННЫХ SQL
НАЧАТЬ
Объявить _id INT;
Объявить _parent INT;
Объявить _next INT;
Объявить продолжить обработчик не найден набор @идентификатор = значение null;

SET _parent = @id;
SET _id = -1;

Если @id равен нулю, то
ВОЗВРАЩАТЬ NULL;
КОНЕЦ, ЕСЛИ;

ПЕТЛЯ
Выберите MIN (id)
В @id
Из my_registration
Где sponser_id = _parent
И id > _id;
Если @id не равен NULL или _parent = @start_with, то
SET @level = @level + 1;
Возвращение @ИД;
КОНЕЦ, ЕСЛИ;
SET @level := @level-1;
Выберите id, sponser_id
В _id, _parent
Из my_registration
Где id = _parent;
КОНЦЕВАЯ ПЕТЛЯ;
КОНЕЦ

Ошибка: MySQL сказал: документация

#1064 - у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с " в строке 5

Patrice T

Каждый идентификатор узла - это буква или цифра ?
дерево имеет 7 узлов, а таблица-5 узлов.
Можете ли вы сделать дерево и стол совпадающими ?

Vivek.anand34

номер

Patrice T

Убедитесь, что дерево и таблица совпадают.
Это делает вещи проще для всех.
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

Vivek.anand34

это письмо, например, для. Я сказал

2 Ответов

Рейтинг:
0

CPallini

Я бы заново построил дерево в коде, используя данные, извлеченные из таблицы, а затем пересек его, чтобы вычислить необходимые значения.
Смотрите, например: PHP Master / структуры данных для PHP-разработчиков: деревья[^].


Рейтинг:
0

Patrice T

Возьмите лист бумаги, запишите таблицу, добавьте 2 столбца, 1 для уровня и 1 для детей.
Не используйте свою божественную силу, которая дает вам мгновенный ответ, и не пытайтесь решить проблему вручную.
Обратите внимание, что ваша единственная информация-это родительский узел для каждого узла.
Уровень: как вы получаете уровень узла в таблице? Что вам нужно знать, чтобы получить уровень случайного узла?
Чайлдс: как вы получаете количество чайлдов узла в таблице? Что вам нужно знать, чтобы получить число чайлдов случайного узла?

Вы должны выйти с процедурой, чтобы получить ответы.

Nota; таблица содержит все, что вам нужно, нет необходимости строить дерево.