Чем отличаются «Полное двоичное дерево», «строгое двоичное дерево», «полное двоичное дерево»?


80

Я запутался в терминологии приведенных ниже деревьев, я изучал Дерево, и я не могу различить эти деревья:

а) Полное двоичное дерево

б) Строгое двоичное дерево

в) Полное двоичное дерево

Пожалуйста, помогите мне различать эти деревья. Когда и где эти деревья используются в структуре данных?


2
Не отвечает ли en.wikipedia.org/wiki/Binary_tree#Types_of_binary_trees на ваш вопрос?
Родион

7
Нет, это не так, среди них много путаницы
kTiwari

1
Строгое двоичное дерево: каждый узел может иметь 2 дочерних узла или вообще не иметь узлов
vikkyhacks

Ответы:


73

Википедия уступила

Полное двоичное дерево (иногда правильное двоичное дерево или 2-дерево или строго двоичное дерево) - это дерево, в котором каждый узел, кроме листьев, имеет двух дочерних элементов.

Итак, у вас нет узлов с одним дочерним элементом. Похоже на строгое двоичное дерево.

Вот изображение полного / строгого двоичного дерева из Google:

введите описание изображения здесь

Полное двоичное дерево - это двоичное дерево, в котором каждый уровень, кроме, возможно, последнего, полностью заполнен, а все узлы расположены как можно дальше слева.

Кажется, это сбалансированное дерево.

Вот изображение полного двоичного дерева из Google, полная древовидная часть изображения является бонусом.

введите описание изображения здесь


34
Ваш пример полного дерева также соответствует критериям полного двоичного дерева, поэтому разница явно размыта, на мой взгляд, вы можете привести пример полного дерева, которое не является полным двоичным деревом, и наоборот, что сделало бы ответ завершен :)
0decimal0

1
Есть разница между полным двоичным деревом и строго двоичным деревом. См. Ответ: stackoverflow.com/a/32064101/5237727
Саураб Бхатия,

2
Кроме того, хотя все полные деревья являются сбалансированными деревьями, все сбалансированные деревья не обязательно являются полными деревьями.
сфарбота 06

1
Что означает, что каждый уровень полностью заполнен?
лолололол ол

2
@lololololol означает, что присутствуют все узлы, которые могут быть на этом уровне.
Сэм Я сказал: "Восстановите Монику"

87

Идеальное дерево:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ / \ / \ / \
x x x x x x x x

Полное дерево:

       x
     /   \
    /     \
   x       x
  / \     / \
 x   x   x   x
/ \ /
x x x

Строгое / полное дерево:

       x
     /   \
    /     \
   x       x
  / \ 
 x   x 
    / \
    x x 

4
Под идеальным двоичным деревом вы подразумеваете полное двоичное дерево, указанное OP?
RBT

3
Идеальное двоичное дерево является как строгим / полным двоичным деревом, так и полным двоичным деревом, но наоборот, не всегда может быть верным.
neo

51

Есть разница между СТРОГОМ и ПОЛНЫМ ДВОИЧНЫМ ДЕРЕВО.

1) ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО: двоичное дерево высоты h, которое содержит ровно (2 ^ h) -1 элементов, называется полным двоичным деревом . (Ссылка: стр. 427, Структуры данных, алгоритмы и приложения в C ++. [University Press], второе издание Сартаджа Сахни).

или другими словами

В ПОЛНОМ ДВОИЧНОМ ДЕРЕВЕ каждый узел имеет ровно 0 или 2 дочерних узла, и все конечные узлы находятся на одном уровне.

Например: Ниже приведено ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО:

          18
       /      \   
     15       30    
    /  \     /   \   
  40    50  100  40 

2) СТРОГО ДВОИЧНОЕ ДЕРЕВО: каждый узел имеет ровно 0 или 2 дочерних элемента.

Например: Следующее - СТРОГО ДВОИЧНОЕ ДЕРЕВО:

         18
       /     \   
     15       30    
    /  \          
  40    50

Я думаю, что нет путаницы в определении полного двоичного дерева, тем не менее, для полноты сообщения я хотел бы рассказать, что такое полное двоичное дерево.

3) ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО: Двоичное дерево является полным бинарным деревом, если все уровни полностью заполнены, кроме, возможно, последнего уровня, и на последнем уровне есть все ключи, насколько это возможно.

Например: Ниже приводится ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО:

           18
       /       \  
     15         30  
    /  \        /  \
  40    50    100   40
 /  \   /
8   7  9 

Примечание . Следующее также является полным двоичным деревом:

         18
       /     \   
     15       30    
    /  \     /   \   
  40    50  100  40 

Можете ли вы дать источник полного определения двоичного дерева? Это противоречит тому, что написано в Википедии , источником которого является NIST .
Calvin Li

@CalvinLi Источник упоминается в определении ПОЛНОГО ДВОИЧНОГО ДЕРЕВА. Вот ссылка на pdf (pg 447 pdf) - o6ucs.files.wordpress.com/2012/10/…
Bhatia

@SaurabhBhatia, последнее представление также верно для полного двоичного дерева. Поправьте меня если я ошибаюсь. Как может одно представление справедливо для разных разновидностей?
Роза

10

Отказ от ответственности . Основным источником некоторых определений является Википедия, любые предложения по улучшению моего ответа приветствуются.

Хотя у этого сообщения есть принятый ответ и он хороший, я все еще был в замешательстве и хотел бы добавить еще несколько разъяснений относительно разницы между этими терминами.

(1) ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО . Полное двоичное дерево - это двоичное дерево, в котором каждый узел, кроме листьев, имеет двух дочерних элементов. Это также называется строго двоичным деревом .

введите описание изображения здесь введите описание изображения здесь

Вышеупомянутые два являются примерами полного или строго двоичного дерева.

(2) ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО - Теперь определение полного двоичного дерева довольно неоднозначно, в нем говорится: - Полное двоичное дерево - это двоичное дерево, в котором каждый уровень, кроме, возможно, последнего , полностью заполнен, и все узлы как как можно дальше слева. Он может иметь от 1 до 2h узлов, насколько это возможно, на последнем уровне h

Обратите внимание на линии, выделенные курсивом.

Неопределенность заключается в строках, выделенных курсивом, «кроме, возможно, последнего», что означает, что последний уровень также может быть полностью заполнен, т.е. это исключение не всегда должно выполняться. Если исключение не выполняется, то оно точно такое же, как и второе изображение, которое я опубликовал, которое также можно назвать идеальным двоичным деревом . Итак, идеальное двоичное дерево также является полным и завершенным, но не наоборот, что станет ясно еще одним определением, которое мне нужно указать:

ПОЧТИ ПОЛНОЕ ДВОИЧНОЕ ДЕРЕВО. Когда сохраняется исключение в определении полного двоичного дерева, оно называется почти полным двоичным деревом или почти полным двоичным деревом. Это просто тип полного двоичного дерева, но необходимо отдельное определение, чтобы сделать его более однозначным.

Таким образом, почти полное двоичное дерево будет выглядеть так, вы можете видеть на изображении, что узлы расположены как можно дальше слева, поэтому это больше похоже на подмножество полного двоичного дерева, говоря более строго, каждое почти полное двоичное дерево является полным двоичным дерево, но не наоборот. :

введите описание изображения здесь


6

Исходя из приведенных выше ответов, вот точная разница между полными / строго, полными и идеальными двоичными деревьями

  1. Полное / строго двоичное дерево : - Каждый узел, кроме конечных, имеет двух дочерних узлов.

  2. Полное двоичное дерево : - Каждый уровень, кроме последнего, полностью заполнен, и все узлы выровнены по левому краю.

  3. Идеальное двоичное дерево : - Каждый узел, кроме конечных, имеет двух дочерних узлов, и каждый уровень (последний уровень тоже) полностью заполнен.


2

Рассмотрим двоичное дерево, узлы которого нарисованы в виде дерева. Теперь начните нумерацию узлов сверху вниз и слева направо. Полное дерево имеет следующие свойства:

Если у n есть дети, то все узлы с номерами меньше n имеют двух детей.

Если у n есть один дочерний элемент, это должен быть левый дочерний элемент, и все узлы меньше n имеют двух дочерних элементов. Кроме того, ни один узел с номером больше n не имеет дочерних узлов.

Если n не имеет дочерних узлов, то ни один узел с номерами больше n не имеет дочерних узлов.

Полное двоичное дерево может использоваться для представления кучи. Его можно легко представить в непрерывной памяти без пропусков (т. Е. Используются все элементы массива, за исключением любого места, которое может существовать в конце).


2

Полное двоичное дерево - это полное двоичное дерево, но обратное невозможно, и если глубина двоичного файла равна n, то нет. узлов в полном двоичном дереве составляет (2 ^ n-1). В двоичном дереве не обязательно, чтобы у него было два дочерних элемента, но в полном двоичном дереве каждый узел не имеет или двух дочерних элементов.


1
Вы не можете строго сказать, что «обратное невозможно», на самом деле само ваше предположение опровергается на примере полного дерева в принятом ответе ... вы скорее должны сказать, что это может быть или не быть возможным
0decimal0

1
если глубина двоичного файла равна n, то нет. узлов в полном двоичном дереве составляет (2 ^ n-1): но определение полного двоичного дерева - это дерево, в котором каждый узел является либо листом, либо имеет двух дочерних элементов. Так что максимально возможного нет. детей составляет (2 ^ n-1), но может быть меньше.
мрида

2

Чтобы начать с основ, очень важно понимать само двоичное дерево, чтобы понимать его различные типы.

Дерево является двоичным деревом тогда и только тогда, когда:

- У него есть корневой узел, который не может иметь дочерних узлов (0 дочерних узлов, NULL дерево)

–Корневой узел может иметь 1 или 2 дочерних узла. Каждый такой узел сам образует двоичное дерево 

–Количество дочерних узлов может быть 0, 1, 2 ....... не более 2

–Существует уникальный путь от корня до всех остальных узлов.

Пример :

        X
      /    \
     X      X
          /   \
         X     X

Переходя к запрашиваемой вами терминологии:

Двоичное дерево является полным двоичным деревом (высоты h, мы принимаем корневой узел как 0) тогда и только тогда, когда:

Уровни от 0 до h-1 представляют полное двоичное дерево высоты h-1.

- Один или несколько узлов на уровне h-1 могут иметь 0 или 1 дочерний узел

Если j, k являются узлами на уровне h-1, тогда j имеет больше дочерних узлов, чем k тогда и только тогда, когда j находится слева от k, то есть на последнем уровне (h) могут отсутствовать конечные узлы, однако присутствующие должны быть сдвинутым влево

Пример :

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 

Двоичное дерево является строго двоичным деревом тогда и только тогда, когда:

Каждый узел имеет ровно два дочерних узла или ни одного узла

Пример :

         X
       /   \
      X     X 
          /   \
         X      X
        / \    / \ 
       X   X  X   X 

Двоичное дерево является полным двоичным деревом тогда и только тогда, когда:

Каждый нелистовой узел имеет ровно два дочерних узла

Все листовые узлы находятся на одном уровне

Пример :

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

Вы также должны знать, что такое идеальное двоичное дерево?

Бинарное дерево является идеальным двоичным деревом тогда и только тогда, когда:

- полное двоичное дерево

- Все листовые узлы находятся на одном уровне

Пример :

                          X
                     /          \
                   /              \
                 /                  \
                X                    X
             /     \              /     \
           X       X             X       X
         /   \   /   \         /   \    /  \ 
        X    X   X   X        X    X    X   X 
      /  \  / \ / \ / \      / \  / \  / \ / \ 
     X   X X  X X X X X     X  X  X X  X X X X 

Что ж, извините, я не могу публиковать изображения, так как у меня нет 10 репутации. Надеюсь, это поможет вам и другим!


2

В моем ограниченном опыте работы с двоичным деревом я думаю:

  1. Строго двоичное дерево : каждый узел, кроме конечных, имеет двух дочерних узлов или имеет только корневой узел.
  2. Полное двоичное дерево: двоичное дерево H строго (или точно), содержащее 2 ^ (H + 1) -1 узлов , ясно, что каждый уровень имеет наибольшее количество узлов. Или, короче, строгое двоичное дерево, где все листовые узлы находятся на одном уровне.
  3. Полное двоичное дерево: это двоичное дерево, в котором все уровни, кроме, возможно, последнего, полностью заполнены, а все узлы расположены как можно дальше слева.

1
Ваше определение полного двоичного дерева неверно, это определение идеального двоичного дерева. Полное двоичное дерево является синонимом строго двоичного дерева. (источник: см. строго двоичное дерево: faculty.cs.niu.edu/~mcmahon/CS241/Notes/bintree.html ) (источник: см. идеальное двоичное дерево: slideshare.net/ajaykumarc137151/… )
Киго,

1
о боже, я только сейчас запуталась, обязательно в этом позабочусь. Большое спасибо.
BertKing

1
Нет проблем :) См. Ответ @Lotus ниже , он его прибил. Я просто рекомендовал отредактировать ваш ответ, чтобы отразить это.
Keego

1

Рассмотрим двоичное дерево высоты h. Двоичное дерево называется полным двоичным деревом, если все листья находятся на высоте «h» или «h-1» без каких-либо пропущенных чисел в последовательности.

                   1
                 /   \
              2       3
            /    \         
         4        5

Это полное двоичное дерево.

                   1
                 /   \
              2       3
            /        /    
         4         6    

Это не полное двоичное дерево, так как узел числа 5 отсутствует в последовательности


0

полное двоичное дерево является полным, если каждый узел имеет 0 или 2 дочерних элемента. в полном двоичном формате количество листовых узлов равно количеству внутренних узлов плюс 1 L = l + 1


0

Полное двоичное дерево: все уровни полностью заполнены, кроме самого нижнего уровня, и главное, что все листовые элементы должны быть дочерними. Строгое двоичное дерево: в этом дереве каждый нелистовой узел не имеет дочернего элемента, т.е. ни левого, ни правого. Полное двоичное дерево: каждый узел имеет либо нулевой дочерний элемент, либо два дочерних элемента (никогда не имеет одного дочернего элемента).


> В этом дереве каждый нелистовой узел не имеет дочернего элемента, т.е. ни левого, ни правого. У нелистового узла должен быть хотя бы один
дочерний элемент
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.