Sobes.tech
Назад к вопросам
Junior — Middle
88

Является ли бинарное дерево сбалансированным структурным состоянием?

Компании, где спрашивали
OZONOZON

Ответ от нейросети

sobes.tech AI

Бинарное дерево само по себе не обязательно является сбалансированным структурным состоянием. Сбалансированное бинарное дерево — это такое дерево, в котором высоты левого и правого поддеревьев для каждой вершины отличаются не более чем на 1. Это свойство обеспечивает эффективный доступ, вставку и удаление элементов.

Если бинарное дерево не сбалансировано, то в худшем случае оно может превратиться в структуру, похожую на связный список, что ухудшит производительность операций.

Пример проверки сбалансированности в Go (упрощённо):

func isBalanced(root *TreeNode) bool {
    if root == nil {
        return true
    }
    leftHeight := height(root.Left)
    rightHeight := height(root.Right)
    if abs(leftHeight - rightHeight) > 1 {
        return false
    }
    return isBalanced(root.Left) && isBalanced(root.Right)
}

func height(node *TreeNode) int {
    if node == nil {
        return 0
    }
    leftHeight := height(node.Left)
    rightHeight := height(node.Right)
    if leftHeight > rightHeight {
        return leftHeight + 1
    }
    return rightHeight + 1
}

func abs(a int) int {
    if a < 0 {
        return -a
    }
    return a
}

Таким образом, бинарное дерево может быть как сбалансированным, так и нет, в зависимости от структуры и правил построения.