public class BinaryNode { private int data; private BinaryNode leftNode, rightNode; } public class BinaryTree { private BinaryNode root; public void insert(BinaryNode node) { root = insert(root, node); } private BinaryNode insert(BinaryNode currentNode, BinaryNode newNode) { StaticDebugger.printDebugInformation(this); // added dynamically ... } } after inserting 4, 2, 213, 31, calling insert(new BinaryNode(12)) outputs: ------------------------ BinaryTree@1e4cbc4 { BinaryNode root = BinaryNode@1df073d { int data = 4 BinaryNode leftNode = BinaryNode@b66cc { int data = 2 BinaryNode leftNode = null BinaryNode rightNode = null } BinaryNode rightNode = BinaryNode@13caecd { int data = 213 BinaryNode leftNode = BinaryNode@f84386 { int data = 31 BinaryNode leftNode = null BinaryNode rightNode = null } BinaryNode rightNode = null } } }