Python - árvore binária

A árvore representa os nós conectados por arestas. É uma estrutura de dados não linear. Possui as seguintes propriedades.

  • Um nó é marcado como nó raiz.
  • Cada nó, exceto a raiz, está associado a um nó pai.
  • Cada nó pode ter um número arbitrário de nó chid.

Criamos uma estrutura de dados em árvore em python usando o conceito de nó discutido anteriormente. Designamos um nó como nó raiz e, em seguida, adicionamos mais nós como nós filhos. Abaixo está o programa para criar o nó raiz.

Criar raiz

Nós apenas criamos uma classe Node e adicionamos atribuindo um valor ao nó. Isso se torna uma árvore com apenas um nó raiz.

class Node:

    def __init__(self, data):

        self.left = None
        self.right = None
        self.data = data


    def PrintTree(self):
        print(self.data)

root = Node(10)

root.PrintTree()

Quando o código acima é executado, ele produz o seguinte resultado -

10

Inserindo em uma Árvore

Para inserir em uma árvore, usamos a mesma classe de nó criada acima e adicionamos um método de inserção a ela. O método de inserção compara o valor do nó ao nó pai e decide adicioná-lo como um nó esquerdo ou um nó direito. Finalmente, o método PrintTree é usado para imprimir a árvore.

class Node:

    def __init__(self, data):

        self.left = None
        self.right = None
        self.data = data

    def insert(self, data):
# Compare the new value with the parent node
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

# Print the tree
    def PrintTree(self):
        if self.left:
            self.left.PrintTree()
        print( self.data),
        if self.right:
            self.right.PrintTree()

# Use the insert method to add nodes
root = Node(12)
root.insert(6)
root.insert(14)
root.insert(3)

root.PrintTree()

Quando o código acima é executado, ele produz o seguinte resultado -

3 6 12 14

Atravessando uma árvore

A árvore pode ser percorrida decidindo uma sequência para visitar cada nó. Como podemos ver claramente, podemos começar em um nó e visitar a subárvore esquerda primeiro e a subárvore direita em seguida. Ou também podemos visitar a subárvore direita primeiro e a subárvore esquerda a seguir. Conseqüentemente, existem nomes diferentes para esses métodos de travessia de árvore. Nós os estudamos em detalhes no capítulo que implementa os algoritmos de travessia de árvore aqui. Algoritmos de árvore transversal