http___fmi.wikidot.com_sdp28_1.xml
http___www.makeinjava.com_category_tree_.xml
1.1 2.1 3.1 4.1 5.1 5.2 5.3 6.1 7.1 8.1 9.1 10.1 10.2 10.3 11.1 11.2 11.3 11.4 12.1 12.2 12.3 13.1 14.1 15.1 16.1 17.1
Създаване на двоично дърво и включване на връх в в двоично дърво за търсене. Двоично дърво Ще използваме следната структура за елемент на дървото: struct btree { int key; btree *left, *right; }; Това е стандартна реализация на двоично дърво(като евентуално може да се направи по-обща с използването на шаблони). Key е поле, което се използва за сравнение на два елемента. Обикновено освен стойност key, има и стойност value, в която се пазят същинските данни в дървото. С тази функция ще четем дървото в паметта(очевидно тя е направена за работа с хора, не машини) void create (btree *&t) { int x; char ch; cout  > x; if ( (t = new btree) == NULL) { cout   left = t -> right = NULL; t -> key = x; cout   left); cout   right); } Двоично дърво за търсене Под двоично дърво за търсене разбираме двоично дърво за всеки връх на което стойностите на всички ключове в лявото поддърво са по-малки от стойността на ключа във върха x и стойностите на всички ключове в дясното поддърво са не по-малки(>=) от стойността на ключа във върха x; такова дърво още наричаме двоично дърво за търсене с повторения, тъй като в него се допускат върхове с еднакви ключове; ако изискването за стойностите на ключовете на върховете в дясното поддърво на върха x е да са по-големи(>) от стойността на ключа във върха x, тогава двоичното дърво за търсене е без повторения; Предимството на такова дърво е, че е възможно лесно да се отхвърля голяма част от потенциалните решения и да се съкрати времето за изпълнение. Например, ако търсим стойността с индекс 6 и сме във връх с индекс 5(да го наречем T) можем със сигурност да твърдим, че търсеният връх не е в лявото поддърво на T. Защото в лявото поддърво на T има само стойности по-малки от T.key, което е по-малко от търсения ключ. Това дърво предоставя бързи отговори за почти всички възможни входни данни. Възможно е обаче да се получи така, че дървото да се изроди в списък. N на брой върха, всеки от които има, например, само ляв наследник. В такъв случай е възможно една проверка да разгледа всичките N върха, което би било бавно. Съществуват оптимизации на дърветата за търсене. Те се наричат балансирани дървета за търсене. Подлежат на регулация(или саморегулация по време на вмъкване на елемент, или външна регулация със специална процедура) и предоставят по-добри времеви сложности за вмъкване, търсене и триене на елемент в средния и най-лошия случай. Такива дървета например са Червено-черните дървета, AVL дърветата и B-дърветата. Ще опишем функция за добавяне на връх в двоично дърво за търсене с повторения; template   struct btree { KeyType key; btree   *left, *right; } ; template   void insert ( KeyType x, btree   &*t) { if (t == NULL) { if ( ( t = new btree  ) == NULL) { cout   left = t -> right = NULL; t -> key = x; return; } if ( x   key ) insert (x, t -> left); else insert (x, t -> right); } И малко код за тестване: int main () { btree   *tree = NULL; insert (5, tree); insert (3, tree); insert (4, tree); cout key) left->key) left->right->key)<<endl; return 0; }
1.1 2.1 2.2 2.3 3.1 4.1 5.1 5.2 5.3 5.4 5.5 6.1 6.2 6.3 6.4 6.5 6.6 7.1 7.2 7.3 7.4 8.1 8.2 8.3 8.4 8.5 8.6 9.1 9.2 9.3 9.4 10.1 10.2 10.3 10.4
What is level in binary tree? Level is distance or hops of node with respect to root node. The root node is considered to be at level 0, so children of root node will be at level 1 (level of root node + 1). So, we can calculate the level of all the nodes in binary tree. As an example, consider the tree: Given the binary search tree, we need to find the Ceil value of given input data. What is Ceil value ? The smallest value just greater than or equal to given input data. We have already discussed about Floor of input data in BST. The logical flow of ceil value in BST is exactly same as that floor value. Let us find Ceil value for BST shown in Fig 1. Given a binary search tree (BST), find out the floorl value of input data using recursive algorithm. Traverse the binary search tree, using depth first search algorithm. What is floor value in BST? The largest value just smaller or equal to given input data or key. We have already discussed Fnd out Ceil value of input data… Read More » Given a binary tree, we need to connect the nodes lying at same level. We have already discussed about the tree traversal using breadth first search algorithm, where we are printing the nodes level by level. By the end of this article we will achieve the same result using next sibling reference. In binary tree, we generally have following information. Given a binary search tree (bst), we would like to find out K smallest element in BST. Traverse the binary search tree using depth first search (DFS) recursive algorithm. Perform InOrder binary tree traversal to find smallest K smallest element. InOrder tree traversal prints elements in sorted order. We can find out K smallest from sorted order… Read More » We are given two binary tree, we need to find out whether one binary tree is Quasi Isomorphic of other binary tree. Quasi Isomorphic tree? Trees are considered to Quasi isomorphic where we concerned about the structures. The structure of both tree either should be identical or obtained by swapping (or Mirror) its children. We are given two binary tree, we need to find out whether one binary tree is Isomorphic of other binary tree. What is Isomorphic meaning? As per English dictionary meaning is “being of identical or similar form, shape, or structure”. By apply above definition to our problem statement, If given binary have identical or similar form or shape or structure to another binary tree, we can say that trees are isomorphic.