Бинарное дерево Java: методы печати всех узлов

Чтобы распечатать все узлы двоичного дерева в Java, вы можете использовать различные алгоритмы обхода. Вот несколько способов добиться этого:

  1. Обход по предварительному заказу. В этом методе сначала вы посещаете корневой узел, затем левое поддерево, а затем правое поддерево. Чтобы распечатать все узлы, вы можете рекурсивно пройти по дереву, используя обход предварительного порядка, и распечатать значение каждого узла.
class Node {
    int data;
    Node left, right;
    public Node(int item) {
        data = item;
        left = right = null;
    }
}
class BinaryTree {
    Node root;
    // Preorder traversal
    void printPreorder(Node node) {
        if (node == null)
            return;
        // Print the node value
        System.out.print(node.data + " ");
        // Recursively print left and right subtrees
        printPreorder(node.left);
        printPreorder(node.right);
    }
// Wrapper method to start traversal from the root
    void printPreorder() {
        printPreorder(root);
    }
    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
        System.out.println("Nodes of the binary tree (preorder traversal):");
        tree.printPreorder();
    }
}
  1. Обход по порядку: в этом методе сначала вы посещаете левое поддерево, затем корневой узел, а затем правое поддерево. Подобно обходу в предварительном порядке, вы можете рекурсивно обходить дерево, используя обход по порядку, и печатать значение каждого узла.

  2. Обход по порядку: в этом методе сначала вы посещаете левое поддерево, затем правое поддерево, а затем корневой узел. Опять же, вы можете рекурсивно пройти по дереву, используя обратный порядок обхода, и вывести значение каждого узла.

  3. Обход по уровням: этот метод обходит дерево уровень за уровнем, слева направо. Вы можете использовать очередь, чтобы отслеживать узлы на каждом уровне и печатать их значения.

Вот реализация метода обхода порядка уровней:

import java.util.LinkedList;
import java.util.Queue;
class Node {
    int data;
    Node left, right;
    public Node(int item) {
        data = item;
        left = right = null;
    }
}
class BinaryTree {
    Node root;
    // Level order traversal
    void printLevelOrder() {
        if (root == null)
            return;
        Queue<Node> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            Node node = queue.poll();
            System.out.print(node.data + " ");
            if (node.left != null)
                queue.add(node.left);
            if (node.right != null)
                queue.add(node.right);
        }
    }
    public static void main(String[] args) {
        BinaryTree tree = new BinaryTree();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
        System.out.println("Nodes of the binary tree (level order traversal):");
        tree.printLevelOrder();
    }
}