Python: вычислить максимальную высоту дерева с несколькими детьми

def __init__(self,label=None):
    self.label = label
    self.leftMostChild = None
    self.RightSibling = None


def height(self):
    if self.leftMostChild == None and self.RightSibling == None:
        return 0
    else:
        if self.leftMostChild:
            return self.leftMostChild.height() + 1

        if self.RightSibling:
            return self.RightSibling.height()

Очевидно, высота отключена на 1. Когда дерево с высотой 3 создается, 2 возвращается после вызова функции height. Я не уверен, где я сделал неправильно в этой функции.

Любая помощь будет оценена.

1 ответ

Решение

Возврат приводит к немедленному завершению функции. Это означает, что если узел имеет как самого левого дочернего, так и правого родного брата, правый родной брат никогда не будет оцениваться. Вот функция только с одним возвратом для каждой ветви if/else.

def height(self):
    if self.leftMostChild == None and self.RightSibling == None:
        return 0
    else:
        leftHeight = rightHeight = 0
        if self.leftMostChild:
            leftHeight =  self.leftMostChild.height() + 1

        if self.RightSibling:
            rightHeight = self.RightSibling.height()
        return max(leftHeight, rightHeight)

Это может быть дополнительно упрощено до:

def height(self):
    leftHeight = rightHeight = 0
    if self.leftMostChild:
        leftHeight =  self.leftMostChild.height() + 1
    if self.RightSibling:
        rightHeight = self.RightSibling.height()
    return max(leftHeight, rightHeight)
Другие вопросы по тегам