Вопрос должен быть о бинарных деревьев (БТС) в целом, а не только бинарные деревья поиска (BST), поскольку порядок данных в узлах не имеет никакого отношения к тому, сбалансировано ли дерево.Одно место для начала - https://en.wikipedia.org/wiki/Binary_tree, но у него есть некоторые проблемы, так как это немного миш-мош различных возможных определений, некоторые из CS и некоторые из теории графов. Вероятно, наиболее полезное, непротиворечивое множество определений:
BT является совершенным или высоты сбалансированного если каждый лист находится на тот же уровень, что эквивалентно каждый путь от данного узла к лист имеет одинаковую длину; это полный, если каждый внутренний (нелистный) узел имеет 2 детей; это полный если он совершенный и полный; это почти завершено или почти завершено если оно совершенное и все уровни, но последние полны, а на последнем уровне листья как можно дальше слева (так что любые «вакансии» находятся справа); это вырожденный, если каждый нелистовой узел имеет только один ребенок (а в виде графика это путь от корня до одного листа).
Используя эти определения: ваше первое дерево совершенные, но не полный, так не полный --node [б] отсутствуют левый ребенок, и добавив, что бы дерево полного; ваше второе дерево вырождено (путь); ваше третье дерево полное (каждый узел, но листья имеют двоих детей) и 1-сбалансированный по высоте, но не «идеально сбалансированный (= идеально?)» или «сбалансированный (что означает« сбалансированный по высоте 0 »)« как вы утверждаете, поскольку не каждый путь от корня до листа имеет одинаковую длину.
В вашем первом дереве, если у [b] было двое детей, но [p] имел только левого ребенка, тогда это было бы почти полностью (идеально и полно, за исключением некоторых пропавших детей на последнем уровне и вакансий как можно правее) - и они важны для хранения двоичных кучек в массивах.
пример Серхио полный (идеальный или сбалансированный по высоте и полный). (И обратите внимание, что это не приятно и может привести к путанице в использовании «сбалансированного», чтобы означать «1-сбалансированное по высоте» или «идеально» как синоним «полного».)
Что-то менее строгое, чем идеальное (или идеально сбалансированный) балансируется по высоте k, что означает, что длины всех путей от данного узла до листа отличаются не более чем на k, что эквивалентно разнице в высоте каждого из левых и правых узлов -подписки не более k. Например, дерево AVL сбалансировано по 1 высоте.
Причина в том, что в этих определениях необходима «высота», заключается в том, что существует другая концепция «weight-balanced BT», которая имеет различные определения в зависимости от использования, причем одно из них означает, что для каждого узла количество узлов в левой части -tree - это то же самое, что и в правом поддереве, а другое заключается в том, что количество узлов в левом поддереве не менее половины и не более чем вдвое больше числа узлов в правом поддереве.
Спасибо, что ответили. Просто хотел убедиться. так, потому что у b есть 1 ребенок и p имеет 2 детей, он сбалансирован правильно? – rullzing
Ваш идеальный метод балансировки всегда работает? потому что у меня есть дерево, которое идеально сбалансировано, но ваш метод не работает с ним. – rullzing
Обратите внимание, что идеальное сбалансированное дерево означает, что оно должно выполнять сбалансированное правило и идеальное правило. Возможно, вы имеете в виду, что у вас есть сбалансированное дерево, можете ли вы добавить его к вопросу? –