Что такое бинарное дерево? Я не буду представлять его здесь. Вы можете использовать Baidu: двоичное дерево. Здесь используйте Java для реализации «двоичного дерева выражения».
Определение выражения двоичного дерева
Первый шаг - понять, что такое бинарное дерево выражения? Например, выражение: (A+B × (CD))-E/F. Размещение чисел в узел листьев и оператора в узел ветвя образует двоичное дерево. Поскольку он сохраняет выражение, оно называется «Бинарное дерево выражения».
Детские ботинки могут быть любопытны, как это было построено? Возьмите 45+23*56/2-5 в качестве примера. Сначала выньте первый номер 45 и поместите его в узел листа. После встречи "+", положите его на узел ветви.
Затем поместите «23», «*», «56», «/» и «2» в последовательность.
Наконец положил "-" и "5",
Это примерно. (Я сам нарисовал эти фотографии, это уродливо, просто посмотрите на них (⊙⊙))
Шаги по созданию двоичного дерева выражения
1. Создать объект узла;
2. Различайте операторов и данные и храните их в соответствующем списке (очередь);
3. Уберите первые два числа и оператор, чтобы сформировать новый номерной узел;
4. Повторите шаг 3, пока оператор не закончится;
5. Пусть корневой узел равный последнему узлу.
Реализация бинарного дерева выражения
Во -первых, создайте класс объекта Node, включая данные, левый поддерев, правую поддерею и несколько методов Set and Get.
пакет tets0714;/** * class объекта узла * @author yuxiu * */public class node {// data private String Data; // Left подтеряж частный узел LCHILD; // Правый поддеревой частный узел RCHILD; Node () {} node (String Data) {this.data = data; } Node (String Data, Node lChild, Node rchild) {super (); this.data = data; this.lchild = lChild; this.rchild = rchild; } public String getData () {return data; } public node getlChild () {return lChild; } public node getrChild () {return rchild; }}Затем постройте двоичное дерево выражения.
пакет tets0714; import java.util.arraylist;/** * Выражение двоичного класса дерева * @author yuxiu * */public class formaluetree {private String s = ""; Частный узел корень; // root node/*** Создать двоичное дерево // объявить список массивов, хранить данные узла, ArrayList <node> numlist = new ArrayList <node> (); // Сначала различать оператор и данные и сохранить его в соответствующем списке для (int i = 0; i <str.length (); i ++) {char ch = str.charat (i); // Извлеките символы строки if (CH> = '0' && ch <= '9') {s+= ch; } else {numlist.add (новый узел (s)); s = ""; OperatorList.Add (CH+""); }} // Добавить последний номер в номер NODE NODE numlist.add (новый узел (s)); while (OperList.Size ()> 0) {// Шаг 3, повторите второй шаг, пока оператор не закончится // секунд, выберите первые два числа и оператор, чтобы сформировать новый номер узла Node Left = numlist.remove (0); Node right = numlist.remove (0); String operator = OperatorList.remove (0); Узел Узел = Новый Узел (Опера, слева, справа); numlist.add (0, node); // предпочитаю новый узел в качестве первого узла, а предыдущий узел с index = 0 изменяется на index = 1} // Шаг 4, пусть корневой узел равен последнему узлу root = numlist.get (0); } / *** данные выходного узла* / public void output () {output (root); // ОСТАНОВИТЬ ТРУДВАСОВЫЙ ПЕРЕД ТЕПЛЕНИЕ ДАННЫХ ДАННЫХ УЗН* @PARAM NODE*/public void output (node node) {if (node.getlchild ()! = Null) {// Если это листовой узел, он завершит выход (node.getlchild ()); } System.out.print (node.getData ()); // Транзакция включает в себя прохождение предварительного заказа (корневой левый и справа), обход на заказ (левый корень вправо) и посторонний обход (левый корень вправо) if (node.getrchild ()! = Null) {output (node.getrchild ()); }} public static void main (string [] args) {formaluetree tree = new formalueTree (); tree.creattree ("45+23*56/2-5"); // Создать двоичное дерево дерева экспрессии. Output (); // Выходная проверка}} Наконец, вы можете вывести «45+23*56/2-5» в консоли, ОК. В среднем порядке, используемом здесь, друзья могут попробовать, что это за следствие заказа заказа и обход после заказа. Что касается обхода, мы поговорим об этом позже.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.