import java.util.ArrayList;
import java.util.List;

/** Simulasi pohon scene graph JavaFX dalam kelas Java biasa. */
public class PohonSkena {
    /** Satu node dalam pohon: punya nama dan daftar anak. */
    static class Node {
        final String nama;
        final List<Node> anak = new ArrayList<>();

        Node(String nama) {
            this.nama = nama;
        }

        Node tambahAnak(Node n) {
            anak.add(n);
            return this;
        }
    }

    public static void main(String[] args) {
        Node akar = new Node("Scene");
        akar.tambahAnak(new Node("VBox"));
        akar.anak.get(0).tambahAnak(new Node("Label"));
        akar.anak.get(0).tambahAnak(new Node("TextField"));

        Node tombolBaris = new Node("HBox");
        tombolBaris.tambahAnak(new Node("Button"));
        tombolBaris.tambahAnak(new Node("Button"));
        akar.anak.get(0).tambahAnak(tombolBaris);

        cetak(akar, 0);
        System.out.println("jumlah node = " + hitung(akar));
        System.out.println("kedalaman   = " + kedalaman(akar));
    }

    static void cetak(Node n, int tingkat) {
        System.out.println("  ".repeat(tingkat) + n.nama);
        for (Node a : n.anak) {
            cetak(a, tingkat + 1);
        }
    }

    static int hitung(Node n) {
        int total = 1;
        for (Node a : n.anak) {
            total += hitung(a);
        }
        return total;
    }

    static int kedalaman(Node n) {
        int dalam = 0;
        for (Node a : n.anak) {
            dalam = Math.max(dalam, kedalaman(a) + 1);
        }
        return dalam;
    }
}
