class Arvore:
    def __init__(self,raiz=None):
        self.raiz=raiz

class Noh:
    def __init__(self,valor,pai=None):
        self.valor=valor
        self.pai=pai
        self.filhos=[]
        if pai:
            pai.filhos.append(self)
    def adicionar(self, filho):
        filho.pai=self
        self.filhos.append(filho)

    def altura(self):
        if self.raiz:
            altura=1
            while self.raiz.filhos:
                self.raiz=self.raiz.filhos[0]
                altura+=1
            return altura
        return 0

    def __iter__(self):
        if self.raiz==None:
            return self.raiz

        pilha=[]
        pilha.append(self.raiz)

        while pilha:
            noh=pilha.pop(0)
            if noh.pai==None:
                yield noh.valor

            for i in noh.filhos:
                i.pai=None
                pilha.append(i)

from unittest.case import TestCase


class NohTestes(TestCase):
    def teste_init_com_defaults(self):
        noh = Noh(5)
        self.assertEqual(5, noh.valor)
        self.assertIsNone(noh.pai)
        self.assertListEqual([], noh.filhos)

    def teste_init_com_pai_justaposto(self):
        pai = Noh(5)
        filho = Noh(4, pai)
        self.assertIs(pai, filho.pai)
        self.assertIs(filho, pai.filhos[0])

    def teste_init_com_pai_nomeado(self):
        pai = Noh(5)
        filho = Noh(4, pai=pai)
        self.assertIs(pai, filho.pai)
        self.assertIs(filho, pai.filhos[0])

    def teste_adicionar_um_filho(self):
        pai = Noh(5)
        filho = Noh(4)
        pai.adicionar(filho)
        self.assertIs(pai, filho.pai)
        self.assertIs(filho, pai.filhos[0])

    def teste_adicionar_dois_filhos(self):
        pai = Noh(5)
        filho = Noh(4)
        filho2 = Noh(3)
        pai.adicionar(filho)
        pai.adicionar(filho2)
        self.assertIs(pai, filho.pai)
        self.assertIs(pai, filho2.pai)
        self.assertListEqual([filho, filho2], pai.filhos)

    def teste_adicionar_tres_filhos(self):
        pai = Noh(5)
        filho = Noh(4)
        filho2 = Noh(3)
        filho3 = Noh(2)
        pai.adicionar(filho)
        pai.adicionar(filho2)
        pai.adicionar(filho3)
        self.assertIs(pai, filho.pai)
        self.assertIs(pai, filho2.pai)
        self.assertIs(pai, filho3.pai)
        self.assertListEqual([filho, filho2, filho3], pai.filhos)


class ArvoreTestes(TestCase):
    def teste_init(self):
        arvore = Arvore()
        self.assertIsNone(arvore.raiz)

    def teste_arvore_com_raiz(self):
        noh = Noh(1)
        arvore = Arvore(noh)
        self.assertIs(noh, arvore.raiz)

    def teste_altura_arvore(self):
        self.assertEqual(0, Arvore().altura())
        self.assertEqual(1, Arvore(Noh(1)).altura())
        arvore_binaria = self.gerar_arvore_binaria()
        self.assertEqual(4, arvore_binaria.altura())

    def test_travesia_em_largura(self):
        travessia_arvore_vazia = [i for i in Arvore()]
        self.assertListEqual([], travessia_arvore_vazia)
        travessia_arvore_unitaria = [i for i in Arvore(Noh(1))]
        self.assertListEqual([1], travessia_arvore_unitaria)
        arvore_binaria = self.gerar_arvore_binaria()
        travessia_arvore_binaria = [i for i in arvore_binaria]
        self.assertListEqual([5, 2, 8, 1, 4, 7, 9, 0, 3, 6], travessia_arvore_binaria)

    def gerar_arvore_binaria(self):
        nohs = [Noh(i) for i in range(10)]
        raiz = nohs[5]
        raiz.adicionar(nohs[2])
        raiz.adicionar(nohs[8])

        nohs[2].adicionar(nohs[1])
        nohs[2].adicionar(nohs[4])

        nohs[1].adicionar(nohs[0])

        nohs[4].adicionar(nohs[3])

        nohs[8].adicionar(nohs[7])
        nohs[8].adicionar(nohs[9])

        nohs[7].adicionar(nohs[6])

        return Arvore(raiz)
@@ -499,10 +499,16 @@
 tura
-+
 =
+altura+
 1%0A  
@@ -593,18 +593,20 @@
 elf.raiz
-==
+ is 
 None:%0A  
@@ -759,10 +759,12 @@
 .pai
-==
+ is 
 None
@@ -810,25 +810,25 @@
         for 
-i
+k
  in noh.filh
@@ -847,17 +847,17 @@
         
-i
+k
 .pai=Non
@@ -887,17 +887,17 @@
 .append(
-i
+k
 )%0A%0Afrom 
@@ -3813,12 +3813,13 @@
 Arvore(raiz)
+%0A

Update largura.py