{"id":4083,"date":"2023-04-17T10:00:56","date_gmt":"2023-04-17T13:00:56","guid":{"rendered":"https:\/\/elemarjr.com\/clube-de-estudos\/?p=4083"},"modified":"2023-10-21T21:40:28","modified_gmt":"2023-10-22T00:40:28","slug":"introducao-a-arvore-binaria-conceitos-terminologias-e-implementacao","status":"publish","type":"artigos","link":"https:\/\/elemarjr.com\/clube-de-estudos\/artigos\/introducao-a-arvore-binaria-conceitos-terminologias-e-implementacao\/","title":{"rendered":"Introdu\u00e7\u00e3o \u00e0 \u00e1rvore bin\u00e1ria: conceitos, terminologias e implementa\u00e7\u00e3o"},"content":{"rendered":"\n<p>Como um desenvolvedor experiente com mais de 30 anos de carreira na \u00e1rea de tecnologia, eu tive a oportunidade de trabalhar com uma variedade de algoritmos e estruturas de dados ao longo dos anos. Um dos mais importantes e \u00fateis para resolver muitos problemas de programa\u00e7\u00e3o \u00e9 a \u00c1rvore Bin\u00e1ria de Busca.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 uma \u00c1rvore Bin\u00e1ria de Busca?<\/h2>\n\n\n\n<p>Uma \u00c1rvore Bin\u00e1ria de Busca \u00e9 uma estrutura de dados que permite armazenar e pesquisar informa\u00e7\u00f5es de maneira eficiente. \u00c9 composta por n\u00f3s que podem ter at\u00e9 dois filhos, um \u00e0 esquerda e outro \u00e0 direita. Cada n\u00f3 na \u00e1rvore cont\u00e9m um valor \u00fanico e os n\u00f3s \u00e0 esquerda t\u00eam valores menores do que o n\u00f3 pai, enquanto os n\u00f3s \u00e0 direita t\u00eam valores maiores.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/elemarjr.com\/clube-de-estudos\/wp-content\/uploads\/2023\/04\/Binary_tree.jpg\" alt=\"\" class=\"wp-image-4380\"\/><figcaption class=\"wp-element-caption\">Uma simples \u00e1rvore bin\u00e1ria de tamanho 9 e altura 3, com um n\u00f3 raiz de valor 2. A \u00e1rvore acima n\u00e3o est\u00e1 balanceada (elemento 5 possui 2 filhos a direita e nenhum a esquerda), nem est\u00e1 ordenada &#8211; notar que n\u00e3o \u00e9 uma \u00e1rvore bin\u00e1ria de procura. &#8211; Fonte: <a href=\"https:\/\/pt.wikipedia.org\/wiki\/%C3%81rvore_bin%C3%A1ria\" target=\"_blank\" rel=\"noreferrer noopener\">Wikipedia<\/a><\/figcaption><\/figure>\n\n\n\n<p>A estrutura da \u00e1rvore bin\u00e1ria de busca permite uma busca eficiente em tempo logar\u00edtmico, ou seja, O(log n), onde n \u00e9 o n\u00famero de elementos na \u00e1rvore. Essa efici\u00eancia \u00e9 alcan\u00e7ada porque a \u00e1rvore \u00e9 estruturada de tal forma que as compara\u00e7\u00f5es para encontrar um elemento s\u00e3o realizadas em caminhos \u00fanicos e ordenados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em C#<\/h3>\n\n\n\n<p>Veja um exemplo simples de uma \u00e1rvore bin\u00e1ria de busca implementada em C#:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1\">C#<\/span><span role=\"button\" tabindex=\"0\" data-code=\"public class Node\n{\n    public int Value;\n    public Node Left;\n    public Node Right;\n\n    public Node(int value)\n    {\n        Value = value;\n        Left = null;\n        Right = null;\n    }\n}\n\npublic class BinarySearchTree\n{\n    public Node Root;\n\n    public BinarySearchTree()\n    {\n        Root = null;\n    }\n\n    public void Insert(int value)\n    {\n        Node node = new Node(value);\n        if (Root == null)\n        {\n            Root = node;\n        }\n        else\n        {\n            Node currentNode = Root;\n            while (true)\n            {\n                if (value &lt; currentNode.Value)\n                {\n                    if (currentNode.Left == null)\n                    {\n                        currentNode.Left = node;\n                        break;\n                    }\n                    currentNode = currentNode.Left;\n                }\n                else\n                {\n                    if (currentNode.Right == null)\n                    {\n                        currentNode.Right = node;\n                        break;\n                    }\n                    currentNode = currentNode.Right;\n                }\n            }\n        }\n    }\n}\n\n\/\/ Fonte: Chat GPT\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\"><code><span class=\"line\"><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> Value;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> Left;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> Right;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Node<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Value <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> value;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">BinarySearchTree<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> Root;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">BinarySearchTree<\/span><span style=\"color: #F8F8F2\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        Root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Insert<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">new<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\">(value);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (Root <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            Root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Root;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (value <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> currentNode.Value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (currentNode.Left <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        currentNode.Left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> currentNode.Left;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (currentNode.Right <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        currentNode.Right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> currentNode.Right;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Fonte: Chat GPT<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">C#<\/span><\/div>\n\n\n\n<p>A classe <code>Node<\/code> representa um n\u00f3 da \u00e1rvore, que cont\u00e9m um valor inteiro (<code>Value<\/code>) e duas refer\u00eancias a outros n\u00f3s, um para o filho \u00e0 esquerda (<code>Left<\/code>) e outro para o filho \u00e0 direita (<code>Right<\/code>).<\/p>\n\n\n\n<p>A classe <code>BinarySearchTree<\/code> \u00e9 a \u00e1rvore em si, e cont\u00e9m uma refer\u00eancia para o n\u00f3 raiz (<code>Root<\/code>). A classe oferece um m\u00e9todo <code>Insert<\/code> que insere um novo n\u00f3 na \u00e1rvore. Esse m\u00e9todo come\u00e7a procurando o lugar correto para inserir o novo n\u00f3, percorrendo a \u00e1rvore a partir do n\u00f3 raiz e seguindo sempre para a esquerda se o valor do novo n\u00f3 for menor que o valor do n\u00f3 atual, ou para a direita se for maior ou igual.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Java<\/h3>\n\n\n\n<p>Confira o mesmo c\u00f3digo implementado em Java:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1\">Java<\/span><span role=\"button\" tabindex=\"0\" data-code=\"public class Node {\n    public int value;\n    public Node left;\n    public Node right;\n\n    public Node(int value) {\n        this.value = value;\n        this.left = null;\n        this.right = null;\n    }\n}\n\npublic class BinarySearchTree {\n    public Node root;\n\n    public BinarySearchTree() {\n        this.root = null;\n    }\n\n    public void insert(int value) {\n        Node node = new Node(value);\n        if (root == null) {\n            root = node;\n        } else {\n            Node currentNode = root;\n            while (true) {\n                if (value &lt; currentNode.value) {\n                    if (currentNode.left == null) {\n                        currentNode.left = node;\n                        break;\n                    }\n                    currentNode = currentNode.left;\n                } else {\n                    if (currentNode.right == null) {\n                        currentNode.right = node;\n                        break;\n                    }\n                    currentNode = currentNode.right;\n                }\n            }\n        }\n    }\n}\n\n\/\/ Fonte: Chat GPT\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\"><code><span class=\"line\"><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Node<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> value;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> left;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> right;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Node<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">this<\/span><span style=\"color: #F8F8F2\">.value <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> value;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">this<\/span><span style=\"color: #F8F8F2\">.left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">this<\/span><span style=\"color: #F8F8F2\">.right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">BinarySearchTree<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> root;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">BinarySearchTree<\/span><span style=\"color: #F8F8F2\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">this<\/span><span style=\"color: #F8F8F2\">.root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">public<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD; font-style: italic\">void<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">insert<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #8BE9FD; font-style: italic\">int<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6; font-weight: bold\">new<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">Node<\/span><span style=\"color: #F8F8F2\">(value);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (root <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #8BE9FD; font-style: italic\">Node<\/span><span style=\"color: #F8F8F2\"> currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> root;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> (<\/span><span style=\"color: #BD93F9\">true<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (value <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> currentNode.value) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (currentNode.left <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        currentNode.left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> currentNode.left;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                } <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> (currentNode.right <\/span><span style=\"color: #FF79C6\">==<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">null<\/span><span style=\"color: #F8F8F2\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        currentNode.right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><span style=\"color: #F8F8F2\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    currentNode <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> currentNode.right;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\">\/\/ Fonte: Chat GPT<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Java<\/span><\/div>\n\n\n\n<p>Note que a estrutura da classe <code>Node<\/code> \u00e9 a mesma, com os atributos <code>value<\/code>, <code>left<\/code> e <code>right<\/code>. J\u00e1 a classe <code>BinarySearchTree<\/code> tamb\u00e9m \u00e9 semelhante, com o atributo <code>root<\/code>, o construtor que inicializa o atributo como <code>null<\/code>, e o m\u00e9todo <code>insert<\/code> que insere um novo n\u00f3 na \u00e1rvore seguindo as regras de uma \u00e1rvore bin\u00e1ria de busca.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de implementa\u00e7\u00e3o em Python<\/h3>\n\n\n\n<p>Confira o mesmo c\u00f3digo implementado em Python:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro padding-bottom-disabled\" style=\"font-size:.875rem;line-height:1.25rem\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#333545;color:#efefe1\">Python<\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Node:\n    def __init__(self, value):\n        self.value = value\n        self.left = None\n        self.right = None\n\nclass BinarySearchTree:\n    def __init__(self):\n        self.root = None\n\n    def insert(self, value):\n        node = Node(value)\n        if not self.root:\n            self.root = node\n        else:\n            current_node = self.root\n            while True:\n                if value &lt; current_node.value:\n                    if not current_node.left:\n                        current_node.left = node\n                        break\n                    current_node = current_node.left\n                else:\n                    if not current_node.right:\n                        current_node.right = node\n                        break\n                    current_node = current_node.right\n\n# Fonte: Chat GPT\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dracula\" style=\"background-color: #282A36\"><code><span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">Node<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__init__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.value <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #FF79C6\">class<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #8BE9FD\">BinarySearchTree<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">__init__<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">None<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #FF79C6\">def<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #50FA7B\">insert<\/span><span style=\"color: #F8F8F2\">(<\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #FFB86C; font-style: italic\">value<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> Node(value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.root:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.root <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            current_node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9; font-style: italic\">self<\/span><span style=\"color: #F8F8F2\">.root<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #FF79C6\">while<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #BD93F9\">True<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> value <\/span><span style=\"color: #FF79C6\">&lt;<\/span><span style=\"color: #F8F8F2\"> current_node.value:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> current_node.left:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        current_node.left <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    current_node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> current_node.left<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                <\/span><span style=\"color: #FF79C6\">else<\/span><span style=\"color: #F8F8F2\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    <\/span><span style=\"color: #FF79C6\">if<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #FF79C6\">not<\/span><span style=\"color: #F8F8F2\"> current_node.right:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        current_node.right <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> node<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                        <\/span><span style=\"color: #FF79C6\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">                    current_node <\/span><span style=\"color: #FF79C6\">=<\/span><span style=\"color: #F8F8F2\"> current_node.right<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6272A4\"># Fonte: Chat GPT<\/span><\/span><\/code><\/pre><span style=\"display:flex;align-items:flex-end;padding:10px;width:100%;justify-content:flex-end;background-color:#282A36;color:#efefe1;font-size:12px;line-height:1;position:relative\">Python<\/span><\/div>\n\n\n\n<p>O c\u00f3digo acima define a classe Node, que \u00e9 utilizada para representar um n\u00f3 na \u00e1rvore.<\/p>\n\n\n\n<p>Cada n\u00f3 tem um valor e refer\u00eancias para seus filhos esquerdo e direito. A classe \u201cBinarySearchTree\u201d \u00e9 usada para criar e manipular a \u00e1rvore bin\u00e1ria de busca. O m\u00e9todo \u201cinsert\u201d \u00e9 utilizado para inserir um novo valor na \u00e1rvore. A implementa\u00e7\u00e3o utiliza um <em>loop <\/em>\u201cwhile\u201d para navegar pela \u00e1rvore e encontrar o local correto para inserir o novo n\u00f3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aplica\u00e7\u00f5es<\/h2>\n\n\n\n<p>As \u00e1rvores bin\u00e1rias de busca s\u00e3o amplamente utilizadas em algoritmos de busca, ordena\u00e7\u00e3o e filtragem de dados. Alguns exemplos de aplica\u00e7\u00e3o s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Implementa\u00e7\u00e3o de dicion\u00e1rios e tabelas de s\u00edmbolos;<\/li>\n\n\n\n<li>Implementa\u00e7\u00e3o de algoritmos de ordena\u00e7\u00e3o como o <em>mergesort<\/em>;<\/li>\n\n\n\n<li>Implementa\u00e7\u00e3o de algoritmos de busca bin\u00e1ria;<\/li>\n\n\n\n<li>Sele\u00e7\u00e3o de elementos em um intervalo de valores;<\/li>\n\n\n\n<li>Rastreamento de informa\u00e7\u00f5es hier\u00e1rquicas em uma estrutura organizacional.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>As \u00e1rvores bin\u00e1rias de busca s\u00e3o uma estrutura de dados fundamental na ci\u00eancia da computa\u00e7\u00e3o e podem ser usadas para resolver uma variedade de problemas de programa\u00e7\u00e3o. Elas permitem uma busca eficiente e s\u00e3o facilmente implementadas em v\u00e1rias linguagens de programa\u00e7\u00e3o.<\/p>\n\n\n\n<p>Esse conte\u00fado \u00e9 parte do material disponibilizado para os participantes do meu grupo de estudos de <strong>Algoritmos e Estruturas de Dados<\/strong>. Voc\u00ea quer participar desse grupo? <strong><a href=\"https:\/\/elemarjr.com\/clube-de-estudos\/algoritmos-e-estruturas-de-dados\/\">Clique aqui e veja como funciona<\/a><\/strong>.<\/p>\n","protected":false},"featured_media":4124,"parent":0,"template":"","cursos":[5],"class_list":["post-4083","artigos","type-artigos","status-publish","has-post-thumbnail","hentry","cursos-algortimos"],"acf":[],"_links":{"self":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos\/4083","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/artigos"}],"about":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/types\/artigos"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media\/4124"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/media?parent=4083"}],"wp:term":[{"taxonomy":"cursos","embeddable":true,"href":"https:\/\/elemarjr.com\/clube-de-estudos\/wp-json\/wp\/v2\/cursos?post=4083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}