{"id":30530,"date":"2019-10-31T21:36:01","date_gmt":"2019-10-31T18:36:01","guid":{"rendered":"https:\/\/prohoster.info\/blog\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska\/"},"modified":"2019-10-31T21:36:01","modified_gmt":"2019-10-31T18:36:01","slug":"binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska","title":{"rendered":"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Prelud\u00eb<\/h2>\n<p>\nKy artikull i kushtohet pem\u00ebve binar\u00eb t\u00eb k\u00ebrkimit. S\u00eb fundmi kam shkruar nj\u00eb artikull mbi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/438512\/\">kompresimin e t\u00eb dh\u00ebnave me metod\u00ebn Huffman.<\/a><\/noindex> Aty nuk u p\u00ebrqendrova shum\u00eb te pem\u00ebt binar\u00eb, sepse metodat e k\u00ebrkimit, injektimit, dhe fshirjes nuk ishin t\u00eb r\u00ebnd\u00ebsishme. Tani vendosa t\u00eb shkruaj nj\u00eb artikull pik\u00ebrisht mbi pem\u00ebt. Le t\u00eb fillojm\u00eb. <\/p>\n<p>Nj\u00eb pem\u00eb \u00ebsht\u00eb nj\u00eb struktur\u00eb t\u00eb dh\u00ebnash, e p\u00ebrb\u00ebr\u00eb nga nyje t\u00eb lidhura me mola. Mund t\u00eb thuhet se nj\u00eb pem\u00eb \u00ebsht\u00eb nj\u00eb rast special i grafit. Ja nj\u00eb shembull i nj\u00eb peme: <\/p>\n<p><img decoding=\"async\" alt=\"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi\" src=\"\/wp-content\/uploads\/2019\/03\/502ac27f1b93f926c68a68777f6bddd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo nuk \u00ebsht\u00eb nj\u00eb pem\u00eb binare e k\u00ebrkimit! T\u00eb gjitha n\u00eb kat!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Terminologjia<\/h2>\n<p><\/p>\n<h4>Rr\u00ebnja<\/h4>\n<p>\n<i>Rr\u00ebnja e pem\u00ebs<\/i> \u00ebsht\u00eb nyja e saj m\u00eb e lart\u00eb. N\u00eb shembullin e dh\u00ebn\u00eb, kjo \u00ebsht\u00eb nyja A. N\u00eb pem\u00eb, nga rr\u00ebnja n\u00eb \u00e7do nyj\u00eb tjet\u00ebr mund t\u00eb \u00e7oj\u00eb vet\u00ebm nj\u00eb rrug\u00eb! N\u00eb t\u00eb v\u00ebrtet\u00eb, \u00e7do nyj\u00eb mund t\u00eb konsiderohet si rr\u00ebnja e n\u00ebnpem\u00ebs q\u00eb i p\u00ebrket asaj nyje.<\/p>\n<h4>Prind\u00ebrit\/\u00e7far\u00ebdo<\/h4>\n<p>\nT\u00eb gjitha nyjat, p\u00ebrve\u00e7 atij rr\u00ebnj\u00eb, kan\u00eb sakt\u00ebsisht nj\u00eb mola q\u00eb \u00e7on lart te nj\u00eb nyj\u00eb tjet\u00ebr. Nyja e vendosur lart se aktualja quhet <i>prindi<\/i> i k\u00ebsaj nyje. Nyja e vendosur posht\u00eb aktuales dhe e lidhur me t\u00eb quhet <i>\u00e7far\u00ebdo<\/i> i k\u00ebsaj nyje. Le t\u00eb shohim me nj\u00eb shembull. T\u00eb marrim nyj\u00ebn B, at\u00ebher\u00eb prindi i saj do t\u00eb jet\u00eb nyja A, dhe \u00e7far\u00ebdo do t\u00eb jen\u00eb nyjat D, E, dhe F.<\/p>\n<h4>Flet\u00eb<\/h4>\n<p>\nNj\u00eb nyj\u00eb q\u00eb nuk ka \u00e7far\u00ebdo do t\u00eb quhet gjethe e pem\u00ebs. N\u00eb shembullin e dh\u00ebn\u00eb, gjethet do t\u00eb jen\u00eb nyjat D, E, F, G, I, J, K.<\/p>\n<p>Kjo \u00ebsht\u00eb terminologjia kryesore. Konceptet e tjera do t\u00eb shqyrtohen m\u00eb tej. Pra, nj\u00eb pem\u00eb binar \u00ebsht\u00eb nj\u00eb pem\u00eb n\u00eb t\u00eb cil\u00ebn \u00e7do nyj\u00eb ka jo m\u00eb shum\u00eb se dy pasardh\u00ebs. Si\u00e7 e keni kuptuar, pema nga shembulli nuk do t\u00eb jet\u00eb binare, pasi nyjat B dhe H kan\u00eb m\u00eb shum\u00eb se dy pasardh\u00ebs. Ja nj\u00eb shembull i nj\u00eb peme binare:<\/p>\n<p><img decoding=\"async\" alt=\"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi\" src=\"\/wp-content\/uploads\/2019\/03\/2f587bd1c428d3850cb0163d6c2984a1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb nyzat e pem\u00ebs mund t\u00eb ket\u00eb \u00e7do informacion. Nj\u00eb pem\u00eb binare e k\u00ebrkimit \u00ebsht\u00eb nj\u00eb pem\u00eb binare, p\u00ebr t\u00eb cil\u00ebn karakterizohen k\u00ebto prona:<\/p>\n<ol>\n<li>T\u00eb dy n\u00ebnpem\u00ebt \u2014 t\u00eb majt\u00eb dhe t\u00eb djatht\u00eb \u2014 jan\u00eb pem\u00eb binar\u00eb k\u00ebrkimesh.<\/li>\n<li>T\u00eb gjitha nyjat e n\u00ebnpem\u00ebs s\u00eb majt\u00eb t\u00eb ndonj\u00eb nyje X kan\u00eb vlera t\u00eb \u00e7el\u00ebsit m\u00eb t\u00eb vogla se vlera e \u00e7el\u00ebsit t\u00eb nyj\u00ebs vet\u00eb X.<\/li>\n<li>T\u00eb gjitha nyjat e n\u00ebnpem\u00ebs s\u00eb djatht\u00eb t\u00eb ndonj\u00eb nyje X kan\u00eb vlera t\u00eb \u00e7el\u00ebsit m\u00eb t\u00eb madhe ose t\u00eb barabart\u00eb me vler\u00ebn e \u00e7el\u00ebsit t\u00eb nyj\u00ebs vet\u00eb X. <\/li>\n<\/ol>\n<p><i>\u00c7el\u00ebsi<\/i> \u2014 ndonj\u00eb karakteristik\u00eb e nyj\u00ebs (p.sh., numri). \u00c7el\u00ebsi \u00ebsht\u00eb i nevojsh\u00ebm p\u00ebr t'i dh\u00ebn\u00eb mund\u00ebsin\u00eb t\u00eb gjeni elementin n\u00eb pem\u00eb q\u00eb i p\u00ebrket atij \u00e7el\u00ebsi. Ja nj\u00eb shembull i nj\u00eb peme binare k\u00ebrkimi:<\/p>\n<p><img decoding=\"async\" alt=\"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi\" src=\"\/wp-content\/uploads\/2019\/03\/a70ca7d2fdf289b5d1e14bdb4bc38b00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Paraqitja e pem\u00ebs<\/h2>\n<p>\nN\u00eb vazhdim, do t\u00eb jap disa (ndoshta, t\u00eb pjesshme) copa kodi p\u00ebr t\u00eb p\u00ebrmir\u00ebsuar kuptimin tuaj. Kodi i plot\u00eb do t\u00eb jet\u00eb n\u00eb fund t\u00eb artikullit. <\/p>\n<p>Pema p\u00ebrb\u00ebhet nga nodet. Struktura e nodit:<\/p>\n<pre><code class=\"java\">public class Node&lt;T&gt; {\n    private T data;\n    private int key;\n    private Node&lt;T&gt; leftChild;\n    private Node&lt;T&gt; rightChild;\n\n    public Node(T data, int key) {\n        this.data = data;\n        this.key = key;\n    }\n    public Node&lt;T&gt; getLeftChild() {\n        return leftChild;\n    }\n\n    public Node&lt;T&gt; getRightChild() {\n        return rightChild;\n    }\n\/\/...metodat e tjera t\u00eb nodit\n}\n<\/code><\/pre>\n<p>\n\u00c7do nod ka dy pasardh\u00ebs (\u00ebsht\u00eb e mundur, q\u00eb pasardh\u00ebsit leftChild dhe\/ose rightChild do t\u00eb p\u00ebrmbajn\u00eb vler\u00ebn null). Ju, ndoshta, keni kuptuar se n\u00eb k\u00ebt\u00eb rast numri data \u2014 jan\u00eb t\u00eb dh\u00ebnat e ruajtura n\u00eb nod; key \u2014 \u00ebsht\u00eb \u00e7el\u00ebsi i nodit.<\/p>\n<p>Tani q\u00eb e kuptuam nodin, le t\u00eb flasim p\u00ebr problemet aktuale me pem\u00ebt. K\u00ebtu dhe m\u00eb tej, me fjal\u00ebn \"pem\u00eb\" do t\u00eb kuptoj konceptin e pem\u00ebs binare t\u00eb k\u00ebrkimit. Struktura e pem\u00ebs binare:<\/p>\n<pre><code class=\"java\">public class BinaryTree&lt;T&gt; {\n     private Node&lt;T&gt; root;\n\n    \/\/metodat e pem\u00ebs\n}\n<\/code><\/pre>\n<p>Si fush\u00eb klase, do t\u00eb na nevojitet vet\u00ebm rr\u00ebnja e pem\u00ebs, pasi nga rr\u00ebnja me ndihm\u00ebn e metodave getLeftChild() dhe getRightChild() mund t\u00eb arrijm\u00eb n\u00eb \u00e7do nod t\u00eb pem\u00ebs.<\/p>\n<h2>Algoritmet n\u00eb pem\u00eb<\/h2>\n<p><\/p>\n<h3>K\u00ebrkimi<\/h3>\n<p>\nSupozoni se keni nj\u00eb pem\u00eb t\u00eb nd\u00ebrtuar. Si t\u00eb gjeni elementin me \u00e7el\u00ebsin key? Duhet t\u00eb l\u00ebvizni gradualisht nga rr\u00ebnja posht\u00eb n\u00ebp\u00ebr pem\u00eb dhe t\u00eb krahasoni vler\u00ebn e key me \u00e7el\u00ebsin e nodit t\u00eb radh\u00ebs: n\u00ebse key \u00ebsht\u00eb m\u00eb i vog\u00ebl se \u00e7el\u00ebsi i nodit t\u00eb radh\u00ebs, at\u00ebher\u00eb kaloni tek pasardh\u00ebsi i majt\u00eb i nodit, n\u00ebse m\u00eb i madh \u2014 tek i djathti, n\u00ebse \u00e7el\u00ebsat jan\u00eb t\u00eb barabart\u00eb \u2014 nodi i k\u00ebrkuar \u00ebsht\u00eb gjetur! Kodi p\u00ebrkat\u00ebs:<\/p>\n<pre><code class=\"java\">public Node&lt;T&gt; find(int key) {\n    Node&lt;T&gt; current = root;\n    while (current.getKey() != key) {\n        if (key &lt; current.getKey())\n            current = current.getLeftChild();\n        else\n            current = current.getRightChild();\n        if (current == null)\n            return null;\n    }\n    return current;\n}\n<\/code><\/pre>\n<p>\nN\u00ebse current b\u00ebhet null, at\u00ebher\u00eb p\u00ebrfundimi arriti fundit t\u00eb pem\u00ebs (n\u00eb nivelin konceptual, ndodheni n\u00eb nj\u00eb vend joekzistues t\u00eb pem\u00ebs \u2014 pasardh\u00ebsi i nj\u00eb gjethe).<\/p>\n<p>Le t\u00eb shqyrtojm\u00eb efikasitetin e algoritmit t\u00eb k\u00ebrkimit n\u00eb nj\u00eb pem\u00eb t\u00eb balancuar (pem\u00eb n\u00eb t\u00eb cil\u00ebn nodet jan\u00eb shp\u00ebrndar\u00eb m\u00eb shum\u00eb ose m\u00eb pak n\u00eb m\u00ebnyr\u00eb t\u00eb barabart\u00eb). At\u00ebher\u00eb efikasiteti i k\u00ebrkimit do t\u00eb jet\u00eb O(log(n)), ku logaritet me baz\u00ebn 2. Shikoni: n\u00ebse n\u00eb nj\u00eb pem\u00eb t\u00eb balancuar ka n elemente, at\u00ebher\u00eb kjo do t\u00eb thot\u00eb se do t\u00eb ket\u00eb log(n) me baz\u00ebn 2 nivele t\u00eb pem\u00ebs. Dhe n\u00eb k\u00ebrkim, p\u00ebr nj\u00eb hap t\u00eb ciklit, zbrisni nj\u00eb nivel.<\/p>\n<h3>Inserting<\/h3>\n<p>\nN\u00ebse e keni kuptuar thelbin e k\u00ebrkimit, at\u00ebher\u00eb nuk do t'ju duket e v\u00ebshtir\u00eb t\u00eb kuptoni futjen. Thjesht duhet t\u00eb zhyteni n\u00eb flet\u00ebn e pem\u00ebs (sipas rregullave t\u00eb zbritjes, p\u00ebrshkruara n\u00eb k\u00ebrkim) dhe t\u00eb b\u00ebheni pasardh\u00ebsi i saj \u2014 t\u00eb majt\u00eb ose t\u00eb djatht\u00eb, n\u00eb var\u00ebsi t\u00eb \u00e7el\u00ebsit. Realizimi:<\/p>\n<pre><code class=\"java\">   public void insert(T insertData, int key) {\n        Node current = root;\n        Node parent;\n        Node newNode = new Node(insertData, key);\n        if (root == null)\n            root = newNode;\n        else {\n            while (true) {\n                parent = current;\n                if (key &lt; current.getKey()) {\n                    current = current.getLeftChild();\n                    if (current == null) {\n                         parent.setLeftChild(newNode);\n                         return;\n                    }\n                }\n                else {\n                    current = current.getRightChild();\n                    if (current == null) {\n                        parent.setRightChild(newNode);\n                        return;\n                    }\n                }\n            }\n        }\n    }\n<\/code><\/pre>\n<p>\nN\u00eb k\u00ebt\u00eb rast, gjithashtu duhet t\u00eb ruajm\u00eb informacionin p\u00ebr prindin e nodit aktual. Kur current t\u00eb b\u00ebhet null, n\u00eb variabl\u00ebn parent do t\u00eb jet\u00eb flet\u00eb e nevojshme. <br \/>\nKrahasimi i efikasitetit t\u00eb futjes, sigurisht, do t\u00eb jet\u00eb i nj\u00ebjt\u00eb si ai i k\u00ebrkimit \u2014 O(log(n)).<\/p>\n<h3>\u00c7instalim<\/h3>\n<p>\nFshirja \u2014 operacioni m\u00eb i komplikuar q\u00eb do t\u00eb duhet t\u00eb kryhet me pem\u00ebn. \u00cbsht\u00eb e qart\u00eb se s\u00eb pari duhet t\u00eb gjejm\u00eb elementin q\u00eb do t\u00eb fshijm\u00eb. Por \u00e7far\u00eb pastaj? N\u00ebse thjesht i japim referenc\u00ebs vler\u00ebn null, at\u00ebher\u00eb do t\u00eb humbasim informacionin mbi n\u00ebnpem\u00ebn, rr\u00ebnja e s\u00eb cil\u00ebs \u00ebsht\u00eb ky nod. Metodat e fshirjes t\u00eb pem\u00ebs ndahen n\u00eb tre raste.<\/p>\n<h4>Rasti i par\u00eb. Nodi i fshir\u00eb nuk ka pasardh\u00ebs.<\/h4>\n<p>\nN\u00ebse nodi i fshir\u00eb nuk ka pasardh\u00ebs, at\u00ebher\u00eb kjo do t\u00eb thot\u00eb se ai \u00ebsht\u00eb nj\u00eb flet\u00eb. Prandaj, thjesht mund t'i japim fushave leftChild ose rightChild t\u00eb prindit t\u00eb tij vler\u00ebn null. <\/p>\n<h4>Rasti i dyt\u00eb. Nodi i fshir\u00eb ka nj\u00eb pasardh\u00ebs.<\/h4>\n<p>\nKy rast gjithashtu nuk \u00ebsht\u00eb shum\u00eb i komplikuar. Le t\u00eb kthehemi n\u00eb shembullin ton\u00eb. Supozoni se duhet t\u00eb fshini elementin me \u00e7el\u00ebs 14. Pajtohuni se qoft\u00eb se ai \u00ebsht\u00eb pasardh\u00ebsi i djatht\u00eb i nodit me \u00e7el\u00ebs 10, \u00e7do pasardh\u00ebs i tij (n\u00eb k\u00ebt\u00eb rast i djatht\u00eb) do t\u00eb ket\u00eb nj\u00eb \u00e7el\u00ebs m\u00eb t\u00eb madh se 10, prandaj mund ta \"prer\u00eb\" leht\u00ebsisht nga pema, dhe prindin ta lidhim direkt me pasardh\u00ebsin e nodit t\u00eb fshir\u00eb, dmth, nodi me \u00e7el\u00ebs 10 ta lidhim me nodin 13. Situata do t\u00eb ishte e ngjashme n\u00ebse do t\u00eb duhej t\u00eb fshinim nj\u00eb nod q\u00eb \u00ebsht\u00eb pasardh\u00ebs i majt\u00eb i prindit t\u00eb tij. Mendoni p\u00ebr k\u00ebt\u00eb vet\u00eb \u2014 \u00ebsht\u00eb nj\u00eb analogji e sakt\u00eb. <\/p>\n<h4>Rasti i tret\u00eb. Nodi ka dy pasardh\u00ebs.<\/h4>\n<p>\nRasti m\u00eb kompleks. Do ta shqyrtojm\u00eb n\u00eb nj\u00eb shembull t\u00eb ri.<\/p>\n<p><img decoding=\"async\" alt=\"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi\" src=\"\/wp-content\/uploads\/2019\/03\/0d600478e4a046ae6f7267be49b231bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h4>K\u00ebrkimi i pasardh\u00ebsit.<\/h4>\n<p>\n Supozoni se duhet t\u00eb fshihet nj\u00eb nod me \u00e7el\u00ebs 25. Kush do ta z\u00ebvend\u00ebsoj\u00eb at\u00eb? Disa nga pasuesit e tij (pasardh\u00ebsit ose pasardh\u00ebsit e pasardh\u00ebsve) duhet t\u00eb b\u00ebhen <i>pasardh\u00ebs<\/i>(ai q\u00eb do t\u00eb marr\u00eb vendin e nodit t\u00eb fshir\u00eb). <\/p>\n<p>Si t\u00eb kuptojm\u00eb, kush duhet t\u00eb b\u00ebhet pasardh\u00ebs? N\u00eb m\u00ebnyr\u00eb intuitore, \u00ebsht\u00eb e qart\u00eb se ky nod n\u00eb pem\u00eb, \u00e7el\u00ebsi i t\u00eb cilit \u00ebsht\u00eb i pari m\u00eb i madh se nodi i fshir\u00eb. Algoritmi p\u00ebrfshin t\u00eb kaluar te pasardh\u00ebsi i tij t\u00eb djatht\u00eb (gjithmon\u00eb te i djathti, sepse u tha m\u00eb par\u00eb se \u00e7el\u00ebsi i pasardh\u00ebsit \u00ebsht\u00eb m\u00eb i madh se \u00e7el\u00ebsi i nodit t\u00eb fshir\u00eb), dhe pastaj t\u00eb kalojm\u00eb p\u00ebrmes zinxhirit t\u00eb pasardh\u00ebsve t\u00eb majt\u00eb t\u00eb k\u00ebtij pasardh\u00ebsi t\u00eb djatht\u00eb. N\u00eb shembullin ton\u00eb, ne duhet t\u00eb kalojm\u00eb te nodi me \u00e7el\u00ebs 35, dhe pastaj t\u00eb zbresim n\u00eb m\u00ebnyr\u00eb t\u00eb vijueshme p\u00ebrmes zinxhirit t\u00eb pasardh\u00ebsve t\u00eb majt\u00eb - n\u00eb k\u00ebt\u00eb rast, ky zinxhir p\u00ebrb\u00ebhet vet\u00ebm nga nodi me \u00e7el\u00ebs 30. Teknikisht, ne po k\u00ebrkojm\u00eb nodin m\u00eb t\u00eb vog\u00ebl n\u00eb grupin e nodave q\u00eb jan\u00eb m\u00eb t\u00eb m\u00ebdhenj se nodi q\u00eb po k\u00ebrkojm\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Binary Tree ose si t\u00eb p\u00ebrgatis\u00ebsh nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi\" src=\"\/wp-content\/uploads\/2019\/03\/50c4e3e49111eec9e1fd13083ee9b9b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKodi i metod\u00ebs p\u00ebr gjetjen e pasardh\u00ebsit:<\/p>\n<pre><code class=\"java\">    public Node&lt;T&gt; getSuccessor(Node&lt;T&gt; deleteNode) {\n        Node&lt;T&gt; parentSuccessor = deleteNode; \/\/ prindi i pasardh\u00ebsit\n        Node&lt;T&gt; successor = deleteNode; \/\/ pasardh\u00ebsi\n        Node&lt;T&gt; current = successor.getRightChild(); \/\/ thjesht nj\u00eb nod \"i kaluesh\u00ebm\"\n        while (current != null) {\n            parentSuccessor = successor;\n            successor = current;\n            current = current.getLeftChild();\n        }\n        \/\/ n\u00eb daljen nga cikli kemi pasardh\u00ebsin dhe prindin e pasardh\u00ebsit\n        if (successor != deleteNode.getRightChild()) { \/\/ n\u00ebse pasardh\u00ebsi nuk p\u00ebrputhet me pasardh\u00ebsin e djatht\u00eb t\u00eb nodit t\u00eb fshir\u00eb\n            parentSuccessor.setLeftChild(successor.getRightChild()); \/\/ at\u00ebher\u00eb prindi i tij merr pasardh\u00ebsin p\u00ebr t\u00eb mos e humbur at\u00eb\n            successor.setRightChild(deleteNode.getRightChild()); \/\/ lidhim pasardh\u00ebsin me pasardh\u00ebsin e djatht\u00eb t\u00eb nodit t\u00eb fshir\u00eb\n        }\n        return successor;\n    }\n<\/code><\/pre>\n<p>\nKodi i plot\u00eb i metod\u00ebs fshi:<\/p>\n<pre><code class=\"java\">public boolean delete(int deleteKey) {\n        Node current = root;\n        Node parent = current;\n        boolean isLeftChild = false; \/\/ N\u00eb var\u00ebsi t\u00eb asaj n\u00ebse nodi i fshir\u00eb \u00ebsht\u00eb f\u00ebmija i majt\u00eb apo i djatht\u00eb i prindit t\u00eb tij, variabli boolean isLeftChild do t\u00eb marr\u00eb vler\u00ebn true ose false p\u00ebrkat\u00ebsisht.\n        while (current.getKey() != deleteKey) {\n            parent = current;\n            if (deleteKey &lt; current.getKey()) {\n                current = current.getLeftChild();\n                isLeftChild = true;\n            } else {\n                isLeftChild = false;\n                current = current.getRightChild();\n            }\n            if (current == null)\n                return false;\n        }\n\n        if (current.getLeftChild() == null &amp;&amp; current.getRightChild() == null) { \/\/ rast i par\u00eb\n            if (current == root)\n                current = null;\n            else if (isLeftChild)\n                parent.setLeftChild(null);\n            else\n                parent.setRightChild(null);\n        }\n        else if (current.getRightChild() == null) { \/\/ rast i dyt\u00eb\n            if (current == root)\n                root = current.getLeftChild();\n            else if (isLeftChild)\n                parent.setLeftChild(current.getLeftChild());\n            else\n                current.setRightChild(current.getLeftChild());\n        } else if (current.getLeftChild() == null) {\n            if (current == root)\n                root = current.getRightChild();\n            else if (isLeftChild)\n                parent.setLeftChild(current.getRightChild());\n            else\n                parent.setRightChild(current.getRightChild());\n        } \n        else { \/\/ rast i tret\u00eb\n            Node successor = getSuccessor(current);\n            if (current == root)\n                root = successor;\n            else if (isLeftChild)\n                parent.setLeftChild(successor);\n            else\n                parent.setRightChild(successor);\n        }\n        return true;\n    }\n<\/code><\/pre>\n<p>\nKompleksiteti mund t\u00eb aproksimohet me O(log(n)).<\/p>\n<h3>K\u00ebrkimi i maksimumit\/minimumit n\u00eb pem\u00eb<\/h3>\n<p>\nE qart\u00eb se si t\u00eb gjeni vler\u00ebn minimale\/maksimale n\u00eb pem\u00eb \u2014 duhet t\u00eb kaloni n\u00eb m\u00ebnyr\u00eb t\u00eb renditur p\u00ebrmes zinxhirit t\u00eb elemnt\u00ebve t\u00eb majt\u00eb\/djatht\u00eb t\u00eb pem\u00ebs p\u00ebrkat\u00ebsisht; kur t\u00eb arrini n\u00eb gjethe, ajo do t\u00eb jet\u00eb elementi minimal\/maksimal.<\/p>\n<pre><code class=\"java\">    public Node getMinimum(Node startPoint) {\n        Node current = startPoint;\n        Node parent = current;\n        while (current != null) {\n            parent = current;\n            current = current.getLeftChild();\n        }\n        return parent;\n    }\n\n    public Node getMaximum(Node startPoint) {\n        Node current = startPoint;\n        Node parent = current;\n        while (current != null) {\n            parent = current;\n            current = current.getRightChild();\n        }\n        return parent;\n    }\n<\/code><\/pre>\n<p>\nKompleksiteti \u2014 O(log(n))<\/p>\n<h3>P\u00ebrshkimi simetrik<\/h3>\n<p>\nP\u00ebrshkimi \u2014 vizitimi i \u00e7do nodi t\u00eb pem\u00ebs me q\u00ebllim p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb veprim me t\u00eb.<\/p>\n<p>Algoritmi i p\u00ebrshkimit simetrik recursiv:<\/p>\n<ol>\n<li>B\u00ebni veprimin me f\u00ebmij\u00ebn e majt\u00eb<\/li>\n<li>B\u00ebni veprimin me vet\u00eb<\/li>\n<li>B\u00ebni veprimin me f\u00ebmij\u00ebn e djatht\u00eb<\/li>\n<\/ol>\n<p>\nKodi:<\/p>\n<pre><code class=\"java\">    public void inOrder(Node current) {\n        if (current != null) {\n            inOrder(current.getLeftChild());\n            System.out.println(current.getData() + \" \");\/\/Here can be anything you want\n            inOrder(current.getRightChild());\n        }\n    }\n<\/code><\/pre>\n<p><\/p>\n<h2>P\u00ebrfundim<\/h2>\n<p>\nFinally! If I missed something or you have any comments, I look forward to them in the comments. As promised, here is the full code.<\/p>\n<p>Node.java:<\/p>\n<pre><code class=\"java\">public class Node {\n    private T data;\n    private int key;\n    private Node leftChild;\n    private Node rightChild;\n\n    public Node(T data, int key) {\n        this.data = data;\n        this.key = key;\n    }\n\n    public void setLeftChild(Node newNode) {\n        leftChild = newNode;\n    }\n\n    public void setRightChild(Node newNode) {\n        rightChild = newNode;\n    }\n\n    public Node getLeftChild() {\n        return leftChild;\n    }\n\n    public Node getRightChild() {\n        return rightChild;\n    }\n\n    public T getData() {\n        return data;\n    }\n\n    public int getKey() {\n        return key;\n    }\n}\n\n<\/code><\/pre>\n<p>\nBinaryTree.java:<\/p>\n<pre><code class=\"java\">publik klasa BinaryTree&lt;T&gt; {\n    private Node&lt;T&gt; root;\n\n    publik Node&lt;T&gt; find(int ky\u00e7) {\n        Node&lt;T&gt; current = root;\n        while (current.getKey() != ky\u00e7) {\n            if (ky\u00e7 &lt; current.getKey())\n                current = current.getLeftChild();\n            else\n                current = current.getRightChild();\n            if (current == null)\n                return null;\n        }\n        return current;\n    }\n\n    publik void insert(T insertData, int ky\u00e7) {\n        Node&lt;T&gt; current = root;\n        Node&lt;T&gt; parent;\n        Node&lt;T&gt; newNode = new Node&lt;&gt;(insertData, ky\u00e7);\n        if (root == null)\n            root = newNode;\n        else {\n            while (true) {\n                parent = current;\n                if (ky\u00e7 &lt; current.getKey()) {\n                    current = current.getLeftChild();\n                    if (current == null) {\n                         parent.setLeftChild(newNode);\n                         return;\n                    }\n                }\n                else {\n                    current = current.getRightChild();\n                    if (current == null) {\n                        parent.setRightChild(newNode);\n                        return;\n                    }\n                }\n            }\n        }\n    }\n\n    publik Node&lt;T&gt; getMinimum(Node&lt;T&gt; startPoint) {\n        Node&lt;T&gt; current = startPoint;\n        Node&lt;T&gt; parent = current;\n        while (current != null) {\n            parent = current;\n            current = current.getLeftChild();\n        }\n        return parent;\n    }\n\n    publik Node&lt;T&gt; getMaximum(Node&lt;T&gt; startPoint) {\n        Node&lt;T&gt; current = startPoint;\n        Node&lt;T&gt; parent = current;\n        while (current != null) {\n            parent = current;\n            current = current.getRightChild();\n        }\n        return parent;\n    }\n\n    publik Node&lt;T&gt; getSuccessor(Node&lt;T&gt; deleteNode) {\n        Node&lt;T&gt; parentSuccessor = deleteNode;\n        Node&lt;T&gt; successor = deleteNode;\n        Node&lt;T&gt; current = successor.getRightChild();\n        while (current != null) {\n            parentSuccessor = successor;\n            successor = current;\n            current = current.getLeftChild();\n        }\n\n        if (successor != deleteNode.getRightChild()) {\n            parentSuccessor.setLeftChild(successor.getRightChild());\n            successor.setRightChild(deleteNode.getRightChild());\n        }\n        return successor;\n    }\n\n    publik boolean delete(int deleteKey) {\n        Node&lt;T&gt; current = root;\n        Node&lt;T&gt; parent = current;\n        boolean isLeftChild = false;\n        while (current.getKey() != deleteKey) {\n            parent = current;\n            if (deleteKey &lt; current.getKey()) {\n                current = current.getLeftChild();\n                isLeftChild = true;\n            } else {\n                isLeftChild = false;\n                current = current.getRightChild();\n            }\n            if (current == null)\n                return false;\n        }\n\n        if (current.getLeftChild() == null &amp;&amp; current.getRightChild() == null) {\n            if (current == root)\n                current = null;\n            else if (isLeftChild)\n                parent.setLeftChild(null);\n            else\n                parent.setRightChild(null);\n        }\n        else if (current.getRightChild() == null) {\n            if (current == root)\n                root = current.getLeftChild();\n            else if (isLeftChild)\n                parent.setLeftChild(current.getLeftChild());\n            else\n                current.setRightChild(current.getLeftChild());\n        } else if (current.getLeftChild() == null) {\n            if (current == root)\n                root = current.getRightChild();\n            else if (isLeftChild)\n                parent.setLeftChild(current.getRightChild());\n            else\n                parent.setRightChild(current.getRightChild());\n        } \n        else {\n            Node&lt;T&gt; successor = getSuccessor(current);\n            if (current == root)\n                root = successor;\n            else if (isLeftChild)\n                parent.setLeftChild(successor);\n            else\n                parent.setRightChild(successor);\n        }\n        return true;\n    }\n\n    publik void inOrder(Node&lt;T&gt; current) {\n        if (current != null) {\n            inOrder(current.getLeftChild());\n            System.out.println(current.getData() + \" \");\n            inOrder(current.getRightChild());\n        }\n    }\n}\n<\/code><\/pre>\n<h2>P.S.<\/h2>\n<p><\/p>\n<h3>Degenerimi n\u00eb O(n)<\/h3>\n<p>\nShumica e jush mund t\u00eb ket\u00eb v\u00ebn\u00eb re: \u00e7far\u00eb ndodh n\u00ebse e b\u00ebjm\u00eb pem\u00ebn t\u00eb paekuilibruar? P\u00ebr shembull, n\u00ebse vendosim n\u00eb pem\u00eb nodet me \u00e7el\u00ebsa n\u00eb rritje: 1,2,3,4,5,6... At\u00ebher\u00eb, pema do t\u00eb ngjaj\u00eb m\u00eb shum\u00eb si nj\u00eb list\u00eb e lidhur. Dhe po, pema do t\u00eb humbas\u00eb struktur\u00ebn e saj si pem\u00eb, duke humbur k\u00ebshtu edhe efikasitetin e qasjes n\u00eb t\u00eb dh\u00ebna. Kompleksiteti i operacioneve t\u00eb k\u00ebrkimit, shtimit, fshirjes do t\u00eb b\u00ebhet si ai i nj\u00eb liste t\u00eb lidhur: O(n). Kjo tregon nj\u00eb nga disavantazhet m\u00eb t\u00eb r\u00ebnd\u00ebsishme, sipas mendimit tim, t\u00eb pem\u00ebve binar\u00eb.<\/p>\n<p class=\"for_users_only_msg\">Vet\u00ebm p\u00ebrdoruesit e regjistruar mund t\u00eb marrin pjes\u00eb n\u00eb anket\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Hyni<\/a><\/noindex>, ju lutem.<\/p>\n<h2 class=\"default-block__polling-title\">Nuk kam qen\u00eb shum\u00eb koh\u00eb n\u00eb Habr, dhe do t\u00eb doja t\u00eb dija, p\u00ebr cilat tema do t\u00eb d\u00ebshironit t\u00eb shihni m\u00eb shum\u00eb artikuj?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Struktura t\u00eb dh\u00ebnash<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Algoritmet (DP, rikthim, kompresim t\u00eb dh\u00ebnash etj.)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Zbatimi i strukturave t\u00eb dh\u00ebnash dhe algoritmeve n\u00eb jet\u00ebn reale<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Programimi i aplikacioneve Android n\u00eb Java<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Programimi i aplikacioneve web n\u00eb Java<\/p>\n<\/li>\n<\/ul>\n<p>    Kan\u00eb votuar 2 p\u00ebrdorues. 1 p\u00ebrdorues abstenoi.<br \/>\n<br \/>Burimi: habr.com<\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u043b\u044e\u0434\u0438\u044f \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c \u043f\u043e\u0438\u0441\u043a\u0430. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0434\u0435\u043b\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e \u0441\u0436\u0430\u0442\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0425\u0430\u0444\u0444\u043c\u0430\u043d\u0430. \u0422\u0430\u043c \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u043b \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u0438\u0431\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0438\u0441\u043a\u0430, \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u044b\u043b\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e \u0434\u0435\u0440\u0435\u0432\u044c\u044f. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0430\u0447\u043d\u0435\u043c. \u0414\u0435\u0440\u0435\u0432\u043e \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u0443\u0437\u043b\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0431\u0440\u0430\u043c\u0438. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u0440\u0435\u0432\u043e \u2014 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22528,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u043b\u044e\u0434\u0438\u044f \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c \u043f\u043e\u0438\u0441\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Binary Tree \u0438\u043b\u0438 \u043a\u0430\u043a \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u043b\u044e\u0434\u0438\u044f \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c \u043f\u043e\u0438\u0441\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:36:01+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:36:01+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Binary Tree ose si t\u00eb p\u00ebrgatisim nj\u00eb pem\u00eb binar\u00eb k\u00ebrkimi | ProHoster","description":"P\u00ebrmbledhje Ky artikull i kushtohet pem\u00ebve binar\u00eb t\u00eb k\u00ebrkimit.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Binary Tree \u0438\u043b\u0438 \u043a\u0430\u043a \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 | ProHoster","og:description":"\u041f\u0440\u0435\u043b\u044e\u0434\u0438\u044f \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u043c \u043f\u043e\u0438\u0441\u043a\u0430.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/binary-tree-ili-kak-prigotovit-binarnoe-derevo-poiska","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:36:01+00:00","article:modified_time":"2019-10-31T18:36:01+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30530","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 01:39:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:33:27","updated":"2026-01-21 01:39:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=30530"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30530\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/22528"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=30530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=30530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=30530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}