🌳Глубокое изучение двоичных деревьев: освойте основные возможности структуры данных!
🌳Глубокое изучение двоичных деревьев: освойте основные возможности структуры данных!

Эй, эй, милашки, я ваш хороший друг - ошибка. Сегодня я здесь, чтобы популяризировать для вас знания о Java SE. Не прячьтесь, дайте мне немного полезной информации. палец вверх. У меня так много лайков. Это даст вам мотивацию говорить более увлекательно! Итак, выработайте хорошую привычку сначала любить, а потом читать. Не перегружайтесь полезной информацией~.

🏆Эта статья включена в рубрику «Snowball Learning Java». Эта рубрика создана специально для тех, кто заинтересован в совершенствовании своих навыков Java. Она охватывает все аспекты Java-программирования и помогает освоить суть Java-разработки с нуля. Спешите следить, собирать и учиться!

Язык кода:java
копировать
Описание среды: Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8.

📝 Предисловие

Эй, друзья! Если вас интересуют структуры данных, особенно двоичные деревья, вы попали по адресу! Двоичные деревья — «большая звезда» в мире структур данных. Они неотделимы от сортировки, поиска и хранения данных. Мы будем использовать его сегодня Java Этот язык поможет вам глубже понять бинарные деревья. Прочитав его, вы обнаружите, что бинарные деревья очень интересны!

📑 Резюме

Эта статья основана на Java В зависимости от языка мы покажем вам бинарные деревья с нуля. Мы подробно рассмотрим шаг за шагом от базовой структуры, общих методов, анализа исходного кода до реальных случаев, чтобы помочь вам освоить суть двоичных деревьев. Независимо от того, являетесь ли вы новичком в программировании или опытным разработчиком, вы можете получить кое-что из этой статьи. Вы готовы? Тогда давайте вместе войдем в мир бинарных деревьев!

🧐 Введение

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

📜 Обзор

Бинарное дерево Основная концепция существования будет включать в себя расширенные операции, такие как рекурсия, стек и очередь. Начнем с базового Бинарного Начало работы со структурой дерева,Представляет основные операции, такие как создание узлов, перемещение, вставка и удаление.,Давайте далее проанализируем его применение в деревьях поиска, сбалансированных деревьях и других областях.

💻 Интерпретация исходного кода ядра

Перейдем непосредственно к Бинарному. Интерпретация исходного кода части дерева позволяет вам понять Бинарное Реализация дерева имеет более глубокое понимание. мы используем Java Продемонстрировать самое распространенное Бинарное Структура и эксплуатация дерева.

Язык кода:java
копировать
// 🌲 Определить класс узла
class TreeNode {
    int data;
    TreeNode left, right;

    public TreeNode(int data) {
        this.data = data;
        left = right = null;
    }
}

// 🌲 Класс двоичного дерева
public class BinaryTree {
    TreeNode root;

    // 🌿 Вставить узел
    public TreeNode insert(TreeNode root, int data) {
        if (root == null) {
            return new TreeNode(data);
        } else {
            if (data < root.data) {
                root.left = insert(root.left, data);
            } else {
                root.right = insert(root.right, data);
            }
        }
        return root;
    }

    // 🌿 Обход предзаказа
    public void preOrder(TreeNode node) {
        if (node != null) {
            System.out.print(node.data + " ");
            preOrder(node.left);
            preOrder(node.right);
        }
    }
}

Приведенный выше код определяет простой класс двоичного дерева BinaryTree,Содержит узлывставлятьи Обход метод предзаказа. введя этот код, вы сможете наглядно увидеть Бинарное Базовая реализация дерева.

Анализ кода:

В этой демонстрации кода я подробно проанализирую каждый код и подробно остановлюсь на идеях дизайна и логике реализации, лежащих в его основе. Я надеюсь, что подобные объяснения помогут учащимся постепенно добиться более глубокого понимания кода. Я начну со структуры кода, постепенно разбивая функции и роль каждого модуля, указывая на ключевые фрагменты кода и объясняя, как они работают вместе. Я считаю, что благодаря такому сочетанию объяснений и практики каждый студент сможет глубже понять код, освоить его как можно скорее и применить в своей учебе и работе.

Далее разберем этот абзац построчно. Java код, который определяет простое Бинарное структура дерева, включая классы узлов TreeNode и Класс двоичного дерева BinaryTree,Осуществленный Бинарное деревоизвставлятьи Обход предзаказадействовать。

🌲 Определить класс узла TreeNode

Язык кода:java
копировать
class TreeNode {
    int data;
    TreeNode left, right;

    public TreeNode(int data) {
        this.data = data;
        left = right = null;
    }
}
  1. Определение свойства
    • int data:хранилище Узловойданные。
    • TreeNode left и TreeNode right:Представляет левый дочерний узел соответственноиправый дочерний узел。
  2. Конструктор
    • public TreeNode(int data):Принимает целочисленный параметр data,Инициализировать данные Должен Узловой,и будет left и right Указатель инициализируется null,Указывает, что узел Должен изначально не имеет дочерних узлов.

Должен TreeNode Роль класса – определить Бинарное. Основной строительный блок дерева, каждый узел может хранить часть данных и быть подключен к своим левым и правым дочерним узлам.


🌲 Класс двоичного дерева BinaryTree

Язык кода:java
копировать
public class BinaryTree {
    TreeNode root;
  • TreeNode root:определенный Бинарное Корневой узел дерева root。Корневой узел Бинарное Начальный узел дерева, Бинарное Все операции дерева основаны на root начинать.

🌿 Вставить метод узла insert

Язык кода:java
копировать
public TreeNode insert(TreeNode root, int data) {
    if (root == null) {
        return new TreeNode(data);
    } else {
        if (data < root.data) {
            root.left = insert(root.left, data);
        } else {
            root.right = insert(root.right, data);
        }
    }
    return root;
}
  1. параметры метода
    • TreeNode root:когдапредыдущий узел,Представляет родительский узел в предыдущей рекурсии.
    • int data:хотетьвставлятьиз节点данные。
  2. логический анализ
    • Корневой узел пуст:если root для null,Указывает, что здесь возможновставлятьновый узел。Создайте файл, содержащий data Новый узел возвращается и используется как корневой узел предыдущего поддерева.
    • Рекурсивная вставка
      • если data меньше текущего root Узловой data,рекурсивный вызов insert метод, будет data Вставить в root Левое поддерево .
      • В противном случае это будет data Вставить в root Правое поддерево .
    • Эта рекурсивная логика гарантирует, что Бинарное Структура дерева, все меньшие ценности Вставить в Левое поддерево, большее значение в правом поддереве, образуя двоичное дерево поиска
  3. возвращаемое значение
    • Возвращает корневой узел после вставки узла root,Убедитесь, что корневой узел бывшего поддерева остался неизменным.

🌿 Метод обхода предзаказа preOrder

Язык кода:java
копировать
public void preOrder(TreeNode node) {
    if (node != null) {
        System.out.print(node.data + " ");
        preOrder(node.left);
        preOrder(node.right);
    }
}
  1. параметры метода
    • TreeNode node:когдавперед Траверс到из节点。
  2. Обход предзаказа
    • Обход Порядок предзаказа для: посетить предыдущий узел когда -> Пройти левое поддерево -> Перейдите правое поддерево.
    • существовать if При оценке сначала проверьте node Будь то для null,если node Нетдлянулевой,но:
      • Распечатать node.data,Представляет узел перед доступом когда.
      • рекурсивный вызов preOrder(node.left) Пройти левое поддерево。
      • рекурсивный вызов preOrder(node.right) Перейдите правое поддерево.
  3. Условие рекурсивного завершения
    • когда node для null Когда , он возвращает пустое значение и не продолжает рекурсию.

проходить preOrder Метод, мы можем нажать Обход предзаказ очередного визита Бинарное Каждый узел в дереве и выходные данные по очереди.

Подвести итог

Этот код реализует базовую структуру и операции Бинарного дерева:

  • TreeNode Класс определен Узловой и содержит данные и указатели на дочерний элемент Узловой.
  • BinaryTree класс содержит Бинарное Вставка дереваи Метод обхода предзаказа。
  • insert Метод гарантированно двоичный дерево Характеристики поиска.
  • preOrder Метод обходит Бинарное в порядке предзаказа дерево, данные выходного узла.

Этот код обеспечивает основные операции Бинарное дерево и может использоваться в качестве основы для более сложных структур данных и алгоритмов в.

📝Разбор кейсов

давай попробуемвставлять几个данные,Посмотрите, как шаг за шагом строится Бинарное дерево. Предположим, мы вставляем данные в порядке: 7, 4, 9, 1, 5. Порядок вставки влияет на структуру дерева,В результате дерево выглядит следующим образом:

Язык кода:java
копировать
      7
     / \
    4   9
   / \
  1   5

Этот случай позволяет интуитивно понять процесс построения и метод распространения данных Бинарного дерева.

🌍 Демонстрация сценария применения

Сценарии применения Бинарного дерева очень широки, например:

  • Управление каталогом файлов:действовать系统使用树形结构管理文件ипапка。
  • индекс базы данных:данные库使用Бинарное дерево(нравиться B дерево) для повышения эффективности поиска данных.
  • Оценка выражения:Калькулятор доступен Бинарное дерево для представления и вычисления значения выражения.

Эти сцены позволяют нам увидеть силу Бинарного дерева.

👍 Анализ преимуществ и недостатков

  • преимущество
    • Находить、вставлятьи删除действоватьиз效率较高。
    • Структура понятна и подходит для рекурсивных операций.
  • недостаток
    • Есть требования к балансу, иначе это может привести к ухудшению производительности.
    • существуют в некоторых случаях,Пространство над головой большое.

📝 Знакомство и демонстрация методов кода класса

Ниже мы представляем Бинарное дерево中из一些重хотеть方法,включатьвставлять、Траверси Находить。

🌲 Способ вставки

Метод вставки используется для вставки новых узлов данных в дерево. Правила вставки данных таковы: значения, меньшие корневого узла, помещаются в левое поддерево, а значения, большие, чем корневой узел, помещаются в правое поддерево.

🌲 Метод обхода

Бинарное дерево有三种主хотетьиз Траверс Способ:вперед序、средний порядоки Послесловие Траверс。Нет同Траверс Способ会得到Нет同из节点访问顺序。


✅ Тестовые случаи

Далее пишем простой main Методы проверки функциональности вставки и обхода.

Язык кода:java
копировать
public class Main {
    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();
        tree.root = tree.insert(tree.root, 7);
        tree.insert(tree.root, 4);
        tree.insert(tree.root, 9);
        tree.insert(tree.root, 1);
        tree.insert(tree.root, 5);

        System.out.println("Обход предзаказарезультат:");        tree.preOrder(tree.root);
    }
}

🧪 Ожидания результатов теста

При выполнении приведенного выше кода ожидаемый результат Обхода предзаказа должен быть:

Язык кода:java
копировать
7 4 1 5 9

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


🔍Анализ тестового кода

существовать main метод, мы создаем BinaryTree Экземпляры, вставленные по очереди 5 узлы。проходить preOrder Метод проверки того, что вставка и обход предварительного заказа работают должным образом. Весь код логически краток и прост для понимания.


📌 Резюме

Мы систематически изучили вышеуказанный контент. Java Язык в Бинарном Основная концепция и реализация дерева. Бинарное дерево是一种重хотетьизданные结构,Его освоение не только улучшает качество кода.,Это также может помочь вам освоиться с вопросами по алгоритмам.


🔚 Резюме

Бинарное Хотя дерево кажется простым, оно имеет широкое применение и множество знаний. Мы из Бинарного Исходя из основного определения дерева, Java Примеры кода проведут вас шаг за шагом. Изучение структур данных не происходит в одночасье. Оно требует постоянной практики и понимания практических приложений. Надеюсь, эта статья поможет вашему Бинарному дерево Learning Paths помогает!


❤️ Сообщение

Обучение программированию похоже на восхождение на гору,Каждый шаг имеет значение. Ну давай же,продолжайте исследовать,непрерывный прогресс,Бинарное дерево — это лишь маленькое начало вашего пути в программировании!

☀️Предлагаю/рекомендую вам

Если вы студент компьютерного факультета,Вы все еще интересуетесь программированием?,都建议直接毫无顾忌из学习此专栏「Снежок изучает Java」,ошибка, торжественное обязательство,Все студенты, изучающие эту рубрику,можно приобрести необходимые знания и навыки,Самый быстрый способ начать программировать на Java в Интернете.,как снежный ком,Роллинг все больше и больше,Экспоненциальное улучшение.

 Нелегко кодировать слова,если эта статья вам полезна,помощьошибка Ну давай жеТри клика подряд (подписаться, поставить лайк, собрать) , ваша поддержка — самая большая мотивация для меня продолжать писать, делиться знаниями и распространять технологии.   В то же время, я также рекомендую всем обратить внимание на мой хардкорный паблик: «Дом чудес в круге обезьян». Получите полезную информацию о бактериях-жуках из первых рук. Вы не только сможете узнать больше технических вопросов, но также бесплатно получите последние вопросы для интервью с крупными заводами BAT и 4000G. Технические книги в формате PDF, десятки тысяч резюме/шаблонов PPT, технические статьи, документы Markdown и другие массивные материалы — у меня есть все, что вам нужно!

📣Обо мне

  Я педераст, CSDN | наггетсы | Тенсент Облако | Облако Huawei | Алибаба Облако | 51CTO | InfoQ Эксперты общественных блогов, 30 лучших звезд блогов, 40 самых популярных авторов года, 12 лучших блоггеров года 51CTO, авторы по контракту на таких платформах, как наггетсы, Облако Huawei | Алибаба Облако| Тенсент Облако Ждите качественных создателей из сообщества,Общее количество поклонников во всей сети30w+ ; Хардкорный общедоступный аккаунт WeChat «Ape Circle Wonder House» приглашает вас присоединиться! Бесплатная проституция, последние вопросы для интервью с интернет-компанией BAT, 4000G Электронные книги в формате PDF, шаблоны резюме и другие массивные материалы.


--End

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода