Відповіді:
Двійкове дерево: дерево, де кожен вузол має до двох листків
1
/ \
2 3
Двійкове дерево пошуку: використовується для пошуку . Двійкове дерево, де ліва дитина містить лише вузли зі значеннями, меншими від батьківського вузла, і де права дитина містить лише вузли зі значеннями, більшими або рівними батьківському.
2
/ \
1 3
Бінарне дерево - це спеціалізована форма дерева з двома дитинами (ліва дитина та права дитина). Це просто представлення даних у структурі дерева
Бінарне дерево пошуку (BST) - це особливий тип двійкового дерева, який відповідає наступній умові:
Бінарне дерево складається з вузлів, де кожен вузол містить вказівник "ліворуч", "правий" вказівник та елемент даних. Покажчик "кореня" вказує на верхній вузол дерева. Лівий і правий покажчики рекурсивно вказують на менші "підтрубки" з обох сторін. Нульовий покажчик являє собою двійкове дерево без елементів - порожнє дерево. Офіційне рекурсивне визначення таке: двійкове дерево або порожнє (представлене нульовим вказівником), або зроблене з одного вузла, де лівий і правий вказівники (рекурсивне визначення вперед) кожний вказують на бінарне дерево.
Двійкове дерево пошуку (BST) або "упорядковане бінарне дерево" - це тип двійкового дерева, де вузли розташовані в порядку: для кожного вузла всі елементи в його лівому піддереві менше до вузла (<), і всі елементи у правому піддереві більше, ніж вузол (>).
5
/ \
3 6
/ \ \
1 4 9
Дерево, показане вище, є двійковим деревом пошуку - «кореневий» вузол - це 5, а його ліві вузли піддерева (1, 3, 4) <5, а його праві підреші (6, 9)> 5. Рекурсивно кожен з підрядів також повинен підкорятися обмеженню двійкового дерева пошуку: у піддереві (1, 3, 4) 3 є коренем, 1 <3 і 4> 3.
Слідкуйте за точним формулюванням проблем - "двійкове дерево пошуку" відрізняється від "бінарного дерева".
Як усі вище пояснювали різницю між бінарним деревом та двійковим деревом пошуку, я лише додаю, як перевірити, чи є дане бінарне дерево двійковим деревом пошуку.
boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{
if(node == null)
{
return true;
}
boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);
return left && right && (node.getValue()<max) && (node.getValue()>=min);
}
Сподіваюся, це допоможе вам. Вибачте, якщо я відхиляюсь від теми, як я вважав, що це варто згадати тут.
Бінарне дерево означає структуру даних, яка складається з вузлів, які можуть мати лише двох посилань на дітей .
Бінарне дерево пошуку ( BST ), з іншого боку, - це особлива форма структури даних Бінарного дерева, де кожен вузол має порівнянне значення, і менші діти, які приєднуються до лівих та більші діти, прикріплені праворуч.
Таким чином, всі BST є Binary Tree, однак лише деякі Binary Tree можуть бути BST . Повідомте, що BST є підмножиною Бінарного дерева .
Отже, Бінарне дерево є більшою мірою загальною структурою даних, ніж Двійкове пошукове дерево . А також ви повинні повідомити, що Binary Search Tree - це сортоване дерево, тоді як для загального Binary Tree немає такого набору правил .
Binary Tree
Який НЕBST
;
5
/ \
/ \
9 2
/ \ / \
15 17 19 21
Двійкове дерево , яке також Binary Tree ;
50
/ \
/ \
25 75
/ \ / \
20 30 70 80
Також повідомляйте, що для будь-якого батьківського вузла в BST ;
Усі ліві вузли мають менше значення, ніж значення батьківського вузла. У верхньому прикладі вузли зі значеннями {20, 25, 30}, які всі розташовані зліва ( ліві нащадки ) 50, менше 50.
Всі праві вузли мають більше значення, ніж значення батьківського вузла. У верхньому прикладі вузли зі значеннями {70, 75, 80}, які всі розташовані праворуч ( праві нащадки ) 50, більше 50.
Для Бінарного Вузола Дерево такого правила немає . Єдине правило для Binary Tree Node - це наявність двох дітей, тому він сам пояснює себе, чому називається двійковим .
Двійкове дерево пошуку - це особливий вид двійкового дерева, який демонструє таку властивість: для будь-якого вузла n значення кожного вузла-нащадка у лівому піддереві n менше значення n, а значення кожного вузла нащадка у правому піддереві становить більше значення n.
Двійкове дерево
Бінарним деревом може бути все, що має 2 дитини та одного батька. Він може бути реалізований у вигляді пов'язаного списку чи масиву, або за допомогою власного API. Як тільки ви почнете додавати в нього більш конкретні правила, воно стає більш спеціалізованим деревом . Найпоширеніша відома реалізація полягає в тому, що додайте менші вузли зліва та великі справа.
Наприклад, мічене бінарне дерево розміром 9 і висотою 3, з кореневим вузлом, значення якого 2. Дерево не врівноважене і не сортоване . https://en.wikipedia.org/wiki/Binary_tree
Наприклад, на дереві зліва A має 6 дітей {B, C, D, E, F, G}. Його можна перетворити у двійкове дерево праворуч.
Двійковий пошук
Бінарний пошук - це техніка / алгоритм, який використовується для пошуку конкретного елемента в ланцюзі вузлів. Бінарний пошук працює на відсортованих масивах .
Двійковий пошук порівнює цільове значення із середнім елементом масиву; якщо вони нерівні, половина, в якій ціль не може лежати, усувається, а пошук триває на решті половини, поки вона не буде успішною або залишилася половина порожньою. https://en.wikipedia.org/wiki/Binary_search_algorithm
Дерево, що представляє двійковий пошук . Тут шукається масив [20, 30, 40, 50, 90, 100], а цільове значення - 40.
Двійкове дерево пошуку
Це одна з реалізацій бінарного дерева. Це спеціалізовано для пошуку .
Бінарне дерево пошуку та структури даних B-дерева базуються на двійковому пошуку .
Двійкові дерева пошуку (BST), які іноді називають упорядкованими або відсортованими бінарними деревами, є певним типом контейнера : структури даних, які зберігають у пам'яті "елементи" (наприклад, числа, імена тощо). https://en.wikipedia.org/wiki/Binary_search_tree
Двійкове дерево пошуку розміром 9 і глибиною 3, з 8 в корені. Листя не намальовані.
І нарешті чудова схема порівняння продуктивності відомих застосованих структур даних та алгоритмів:
Зображення, зроблене з алгоритмів (4-е видання)
Перевірити, чи є чи не дане бінарне дерево є двійковим деревом пошуку, ось альтернативний підхід.
Траверс дерева в Симетричною моді (тобто зліва від дітей -> Батько -> Право дитина), магазин , прохідне вузол даних в тимчасовому змінному дозволяє сказати , що темп , просто перед збереженням в темп , перевірка даних поточної погоди в Node вище , то попередня чи ні . Тоді просто розбийте його, дерево не є двійковим деревом пошуку, інакше пройдіть до кінця.
Нижче наводиться приклад з Java:
public static boolean isBinarySearchTree(Tree root)
{
if(root==null)
return false;
isBinarySearchTree(root.left);
if(tree.data<temp)
return false;
else
temp=tree.data;
isBinarySearchTree(root.right);
return true;
}
Підтримуйте змінну temp зовні
У дереві двійкового пошуку всі вузли розташовані у певному порядку - вузли зліва від кореневого вузла мають менше значення, ніж його корінь, і всі вузли праворуч від вузла мають значення, що перевищують значення корінь.