簡単な2分木をJavaでどのように実装するか
BinaryTreeというクラスを作成してNodeという内部クラスを含め、バイナリーツリーのノードを表すことで、Javaで簡易的にバイナリーツリーを実装することができます。
public class BinaryTree {
private Node root;
private class Node {
private int data;
private Node left;
private Node right;
public Node(int data) {
this.data = data;
this.left = null;
this.right = null;
}
}
public BinaryTree() {
root = null;
}
public void insert(int data) {
root = insert(root, data);
}
private Node insert(Node node, int data) {
if (node == null) {
node = new Node(data);
} else {
if (data <= node.data) {
node.left = insert(node.left, data);
} else {
node.right = insert(node.right, data);
}
}
return node;
}
public boolean search(int data) {
return search(root, data);
}
private boolean search(Node node, int data) {
if (node == null) {
return false;
}
if (data == node.data) {
return true;
} else if (data < node.data) {
return search(node.left, data);
} else {
return search(node.right, data);
}
}
public void inorderTraversal() {
inorderTraversal(root);
}
private void inorderTraversal(Node node) {
if (node != null) {
inorderTraversal(node.left);
System.out.print(node.data + " ");
inorderTraversal(node.right);
}
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.insert(10);
tree.insert(5);
tree.insert(15);
tree.insert(3);
tree.insert(7);
System.out.println("Inorder traversal:");
tree.inorderTraversal();
int searchData = 7;
System.out.println("\nIs " + searchData + " present in the tree? " + tree.search(searchData));
}
}
上記のコードでは、バイナリツリーのノードを表すためにNodeという内部クラスを使用しています。このクラスは、整数のdataメンバー変数と、左ノードと右ノードへの参照を持っています。
BinaryTreeクラスはルートノードrootを持ち,デフォルトではnullになっています。次のメソッドが含まれています:
- 挿入(int data):渡されたデータを2分木に挿入する。
- search(int data):指定されたデータを二分木から検索します。存在する場合、trueを返します。そうでない場合は、falseを返します。
- inorderTraversal():木のノードデータを中順で表す。
mainメソッドでは、BinaryTreeを作成し、いくつかのデータの挿入を行っています。その後、inorderTraversalメソッドを使ってBinaryTreeのノードのデータのプリントアウトを行い、searchメソッドを使って指定されたデータの検索をしています。