Sobes.tech
Back to questions
Junior — Middle
87

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

Companies where asked
OZONOZON

Answer from AI

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
}

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