Чтобы распечатать все узлы двоичного дерева в Java, вы можете использовать различные алгоритмы обхода. Вот несколько способов добиться этого:
- Обход по предварительному заказу. В этом методе сначала вы посещаете корневой узел, затем левое поддерево, а затем правое поддерево. Чтобы распечатать все узлы, вы можете рекурсивно пройти по дереву, используя обход предварительного порядка, и распечатать значение каждого узла.
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();
}
}
-
Обход по порядку: в этом методе сначала вы посещаете левое поддерево, затем корневой узел, а затем правое поддерево. Подобно обходу в предварительном порядке, вы можете рекурсивно обходить дерево, используя обход по порядку, и печатать значение каждого узла.
-
Обход по порядку: в этом методе сначала вы посещаете левое поддерево, затем правое поддерево, а затем корневой узел. Опять же, вы можете рекурсивно пройти по дереву, используя обратный порядок обхода, и вывести значение каждого узла.
-
Обход по уровням: этот метод обходит дерево уровень за уровнем, слева направо. Вы можете использовать очередь, чтобы отслеживать узлы на каждом уровне и печатать их значения.
Вот реализация метода обхода порядка уровней:
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();
}
}