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

Эй, эй, эй, милые милашки, я ваш хороший друг - ошибка. Сегодня я здесь, чтобы популяризировать для вас знания о 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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose