2015-10-21 1 views
0

Я новичок в Python и пытаюсь вернуть высоту узла в упорядоченное дерево в python. Вот код, у меня есть:Возвращение высоты узла в упорядоченное дерево в Python

def Height(node, T): 
    if Is_OrdLeaf(T) and node == OrdRoot(T): 
     return 0 
    else: 
     heights = [] 
     for x in Children(node, T): 
      heights += [Height(x, T) + 1] 
     return max(heights) 

Но, когда я запускаю этот код с деревом я получаю

ValueError: max() arg is an empty sequence

Все из названных функций работают и, следовательно, высота не должна быть пустой. Что не так?

Заранее спасибо

+0

Это должно быть очевидно из вашей ошибки, но вы берете 'max' пустого списка. Вы должны проверить, пусто ли «высоты» и вернуть 0, если это так. – rlbond

+0

Мне действительно интересно, почему высоты пусты. Почему он не добавляет данные вещи в высоту? Я точно знаю, что Children() и OrdRoot() работают, и что я использую действительный узел и дерево. – LivingRobot

+0

Если ваш узел является листовым узлом, у него нет детей. – rlbond

ответ

0
heights = [] 

def height(t, level=0): 
    if not t.children: 
     heights.append(level) 
    else: 
     for c in t.children: 
      height(c, level+1) 
    return max(heights) 
+0

Это не двоичное дерево. Поэтому у меня действительно нет ни левого, ни правого. – LivingRobot

+0

OK Я обновлю код до дерева без BST –

0

Я хотел бы, чтобы проверить это для вас, но вы опустили класс дерева. Это стандартный пакет?

else: 
    return max([Height(x, T) for x in Children(node, T)]) 

Если у вас есть большое дерево, он может работать еще лучше, чтобы заменить список с пониманием генератора (изменить кронштейны круглые скобки).

Смежные вопросы