二分木を対象とした反復的な深さ優先探索の実装方法(Java)


まず、二分木を表すノードを定義します。

class Node {
    int value;
    Node left;
    Node right;
    public Node(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

次に、反復的な深さ優先探索アルゴリズムを実装します。スタックを使用してノードを追跡します。

import java.util.Stack;
class BinaryTree {
    Node root;
    public void iterativeDFS() {
        if (root == null) {
            return;
        }
        Stack<Node> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()) {
            Node currentNode = stack.pop();
            System.out.print(currentNode.value + " ");
            if (currentNode.right != null) {
                stack.push(currentNode.right);
            }
            if (currentNode.left != null) {
                stack.push(currentNode.left);
            }
        }
    }
}

これで、反復的な深さ優先探索アルゴリズムが実装されました。以下のように使用することができます。

public class Main {
    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("反復的な深さ優先探索結果:");
        tree.iterativeDFS();
    }
}

このコードを実行すると、以下の出力が得られます。

反復的な深さ優先探索結果:
1 2 4 5 3

以上が、Javaで二分木を対象とした反復的な深さ優先探索アルゴリズムの実装方法です。このアルゴリズムを使用することで、二分木の要素を深さ優先の順序で効率的に処理することができます。