"Информатика", Рудченко Т.А., Семёнов А.Л. / Под ред. Семёнова А.Л.
Дерево вычисления показывает, из каких чисел, переменных и операций составлено выражение и в каком порядке выполняются действия. Каждая вершина обозначает число, переменную или операцию, а связи между вершинами отражают, какие значения нужны для вычисления. Корнем становится главная операция выражения, листьями — его исходные данные. Такое представление помогает не запутаться в скобках, приоритете действий и вложенных выражениях, а также вычислять выражение снизу вверх.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Дерево вычисления — схема, которая показывает, из каких частей составлено выражение и в каком порядке над ними выполняются действия. По ней вычисление представляют как переход от исходных значений к результату: сначала выполняют операции над простыми частями, затем — над полученными результатами. Такое изображение помогает увидеть структуру выражения, даже если в записи много действий и скобок.
Вершина дерева — его элемент, обозначающий число, переменную или операцию. Число или переменная задают значение, с которым работают, а операция указывает, что нужно сделать с её операндами. Различая эти виды вершин, можно понять, где в дереве находятся исходные данные, а где — действия.
Лист дерева — вершина, у которой нет дочерних вершин, то есть от неё не отходят ветви к другим элементам. Обычно листьями становятся числа и переменные: над ними не нужно выполнять дальнейшие действия внутри этого дерева. Листья служат исходными значениями, от которых начинается вычисление.
Корень дерева — самая верхняя вершина, соответствующая главной операции выражения. Главной называют операцию, которая объединяет части всего выражения и выполняется последней с учётом скобок и приоритета действий. Поэтому корень помогает сразу увидеть, как выражение разделяется на основные части.
Чтобы построить дерево по арифметическому выражению, сначала находят его главную операцию. Её записывают в корне, а операнды — части, над которыми она выполняется, — размещают в дочерних вершинах. Если операндом является не отдельное число, а выражение, вместо листа для него строят отдельное поддерево. Так дерево последовательно раскрывает состав выражения, не смешивая целое с его частями.
Главную операцию нельзя выбирать по тому, какой знак встретился первым слева: запись символов не всегда совпадает с порядком выполнения действий. Сначала учитывают скобки, затем правила приоритета, например умножение обычно выполняется раньше сложения. Поэтому в выражении 2 + 3 * 4 корнем будет сложение, а умножение окажется в поддереве. Если поставить в корень умножение, дерево покажет другой порядок действий и будет соответствовать уже иному выражению.
Вычислять дерево начинают с листьев, потому что операция не даёт результата, пока неизвестны её операнды. Сначала находят значения чисел и переменных, а затем переходят к вершинам-операциям, у которых уже вычислены все дочерние части. Например, в дереве выражения 2 + 3 * 4 сперва вычисляют 3 * 4, затем складывают результат с 2. Так движение от листьев к корню повторяет порядок вычисления исходного выражения.
Чтобы восстановить выражение по готовому дереву, начинают с корня и записывают обозначенную им операцию над записями дочерних поддеревьев. Каждую операцию раскрывают таким же способом, пока не дойдут до листьев. Затем проверяют, не изменился ли порядок действий при записи без скобок. Если изменился бы, скобки нужны, чтобы исходная структура дерева сохранилась в строке.
При нескольких уровнях вложенности каждый операнд-выражение получает своё поддерево, а его вершиной становится главная операция именно этой части. В выражении (8 − 2) * (3 + 1) / 2 сначала выделяют действия в скобках, а затем учитывают, что умножение и деление имеют одинаковый приоритет и выполняются слева направо. Поэтому корнем будет деление, слева от него — поддерево умножения, справа — число 2. В поддереве умножения находятся отдельные поддеревья вычитания и сложения.
| Элемент | Что обозначает | Расположение и роль | Пример |
|---|---|---|---|
| Лист | Число или переменную без дальнейших операций | Вершина без дочерних вершин; исходное значение | Лист 7 в дереве выражения 7 + 3 |
| Вершина с операцией | Действие над операндами | Имеет дочерние вершины с операндами | Вершина + для выражения 7 + 3 |
| Корень | Главную операцию выражения | Самая верхняя вершина; объединяет основные части | + в дереве выражения 7 + 3 |
| Поддерево | Часть дерева, представляющую отдельное выражение | Вершина вместе со всеми её потомками | 3 * 4 в дереве выражения 2 + 3 * 4 |
Сначала определите роль каждой вершины: исходное это значение, операция или целая часть выражения. Затем проверьте, что у каждой операции в дочерних вершинах стоят её операнды, а поддерево соответствует отдельному выражению. Такая проверка помогает заметить пропущенное действие или неверно выбранный корень.
Задача 1. Постройте дерево вычисления для выражения 7 + 3.
Ответ: корень — +, его листья — 7 и 3; значение выражения равно 10.
Задача 2. Постройте дерево и найдите значение выражения 2 + 3 * 4.
Ответ: корень — +, поддерево справа — 3 * 4; значение выражения равно 14.
Задача 3. Постройте дерево и вычислите (8 − 2) * (3 + 1) / 2.
Ответ: корень — деление, под ним находятся поддерево умножения и лист 2; значение выражения равно 12.
Ошибка — назначить корнем первую операцию в записи, а не главную операцию всего выражения. Так поступают, потому что читают выражение слева направо и не учитывают приоритет действий; в итоге дерево может изменить порядок вычисления. Проверьте себя: определите, какая операция выполняется последней после учёта скобок и приоритета, — именно она должна быть корнем.
Ошибка — нарисовать отдельную вершину для скобок. Скобки не выполняют арифметического действия, поэтому вершиной может быть операция внутри них, но не сами скобки. Их ошибочно принимают за часть дерева, потому что в записи они заметны; чтобы проверить построение, убедитесь, что каждая вершина обозначает число, переменную или операцию.
Ошибка — считать операнд листом, даже если он сам является выражением. Это упрощение пропускает операции внутри операнда и не показывает, откуда берётся его значение. Если в дочерней части записи есть действие, постройте для неё поддерево и проверьте, что все операции исходного выражения попали в дерево.
Ошибка — вычислять дерево сверху вниз, пытаясь сразу найти значение корня. Корневая операция зависит от значений дочерних вершин, поэтому такой способ не даёт результата, пока операнды неизвестны. Начинайте с листьев и переходите к операции лишь тогда, когда вычислены все её операнды; проверка проста: у каждой выполняемой вершины уже должны быть известны дочерние значения.
Для построения дерева нужны знания об арифметических операциях, скобках, приоритете действий и порядке вычисления выражений. Дерево не заменяет эти правила, а наглядно показывает, как они задают структуру конкретной записи. Поэтому, если дерево не получается построить, полезно сначала разобрать порядок действий обычным способом.
В программировании деревья помогают разбирать выражения и последовательности действий алгоритма. Похожую роль играют синтаксические деревья: они показывают, как части записи связаны по правилам языка. Умение видеть в выражении дерево облегчает переход от арифметики к чтению программ.
Что именно показывает дерево вычисления?
Оно показывает состав выражения и зависимости между его частями: какие операции выполняются над какими числами или выражениями. По дереву можно проследить порядок вычислений, не ориентируясь только на последовательность символов.
Как определить корень дерева для выражения?
Найдите главную операцию — ту, которая выполняется последней, если учитывать скобки и приоритет операций. Она становится корнем, а её операнды располагаются в дочерних вершинах.
Нужно ли изображать скобки отдельными вершинами?
Нет, скобки не являются числами, переменными или операциями, поэтому отдельными вершинами не становятся. Они помогают определить, какие части выражения нужно объединить в поддеревья.
В каком порядке вычислять значения вершин?
Начинают с листьев: находят значения чисел и переменных. Затем вычисляют операции, у которых уже известны значения всех операндов, и так переходят к корню.
Как по дереву восстановить исходное выражение?
Запишите операцию из корня и подставьте вместо её операндов записи из дочерних поддеревьев. Если без скобок изменится порядок действий, заключите соответствующую часть в скобки.
Дерево вычисления