Назад к вопросам
OZON
Junior — Middle
88
Является ли бинарное дерево сбалансированным структурным состоянием?
Компании, где спрашивали
Ответ от нейросети
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
}
Таким образом, бинарное дерево может быть как сбалансированным, так и нет, в зависимости от структуры и правил построения.