1: // Represent each leaf as a one-node tree 2: BinaryTreeInterface<String> dTree = new BinaryTree<>(); 3: dTree.setTree("D"); 4: BinaryTreeInterface<String> fTree = new BinaryTree<>(); 5: fTree.setTree("F"); 6: BinaryTreeInterface<String> gTree = new BinaryTree<>(); 7: gTree.setTree("G"); 8: BinaryTreeInterface<String> hTree = new BinaryTree<>(); 9: hTree.setTree("H"); 10: BinaryTreeInterface<String> emptyTree = new BinaryTree<>(); 11: 12: // Form larger subtrees 13: BinaryTreeInterface<String> eTree = new BinaryTree<>(); 14: eTree.setTree("E", fTree, gTree); // Subtree rooted at E 15: BinaryTreeInterface<String> bTree = new BinaryTree<>(); 16: bTree.setTree("B", dTree, eTree); // Subtree rooted at B 17: BinaryTreeInterface<String> cTree = new BinaryTree<>(); 18: cTree.setTree("C", emptyTree, hTree); // Subtree rooted at C 19: BinaryTreeInterface<String> aTree = new BinaryTree<>(); 20: aTree.setTree("A", bTree, cTree); // Desired tree rooted at A 21: 22: // Display root, height, number of nodes 23: System.out.println("Root of tree contains " + aTree.getRootData()); 24: System.out.println("Height of tree is " + aTree.getHeight()); 25: System.out.println("Tree has " + aTree.getNumberOfNodes() + " nodes"); 26: 27: // Display nodes in preorder 28: System.out.println("A preorder traversal visits nodes in this order:"); 29: Iterator<String> preorder = aTree.getPreorderIterator(); 30: while (preorder.hasNext()) 31: System.out.print(preorder.next() + " "); 32: System.out.println(); 33: // Version 4.0