CSE143 Simple Binary Tree handout #23 Client Code IntTreeClient.java ------------------------------ // Short program that demonstrates the use of the IntTree class. public class IntTreeClient { public static void main(String[] args) { IntTree t = new IntTree(12); System.out.println("Tree structure:"); t.printSideways(); System.out.println(); t.printPreorder(); t.printInorder(); t.printPostorder(); } } Log of Execution of IntTreeClient --------------------------------- Tree structure: 7 3 6 12 1 11 5 10 2 9 4 8 preorder: 1 2 4 8 9 5 10 11 3 6 12 7 inorder: 8 4 9 2 10 5 11 1 12 6 3 7 postorder: 8 9 4 10 11 5 2 12 6 7 3 1 Class IntTreeNode.java ---------------------- // Class for storing a single node of a binary tree of ints public class IntTreeNode { public int data; public IntTreeNode left; public IntTreeNode right; // constructs a leaf node with given data public IntTreeNode(int data) { this(data, null, null); } // constructs a branch node with given data, left subtree, // right subtree public IntTreeNode(int data, IntTreeNode left, IntTreeNode right) { this.data = data; this.left = left; this.right = right; } } Class IntTree.java ------------------ // Simple binary tree class that includes methods to construct a // tree of ints, to print the structure, and to print the data // using a preorder, inorder or postorder traversal. The trees // built have nodes numbered starting with 1 and numbered // sequentially level by level with no gaps in the tree. The // documentation refers to these as "sequential trees." public class IntTree { private IntTreeNode overallRoot; // pre : max > 0 // post: constructs a sequential tree with given number of // nodes public IntTree(int max) { if (max <= 0) { throw new IllegalArgumentException("max: " + max); } overallRoot = buildTree(1, max); } // post: returns a sequential tree with n as its root unless // n is greater than max, in which case it returns an // empty tree private IntTreeNode buildTree(int n, int max) { if (n > max) { return null; } else { return new IntTreeNode(n, buildTree(2 * n, max), buildTree(2 * n + 1, max)); } } // post: prints the tree contents using a preorder traversal public void printPreorder() { System.out.print("preorder:"); printPreorder(overallRoot); System.out.println(); } // post: prints in preorder the tree with given root private void printPreorder(IntTreeNode root) { if (root != null) { System.out.print(" " + root.data); printPreorder(root.left); printPreorder(root.right); } } // post: prints the tree contents using an inorder traversal public void printInorder() { System.out.print("inorder:"); printInorder(overallRoot); System.out.println(); } // post: prints in inorder the tree with given root private void printInorder(IntTreeNode root) { if (root != null) { printInorder(root.left); System.out.print(" " + root.data); printInorder(root.right); } } // post: prints the tree contents using a postorder traversal public void printPostorder() { System.out.print("postorder:"); printPostorder(overallRoot); System.out.println(); } // post: prints in postorder the tree with given root private void printPostorder(IntTreeNode root) { if (root != null) { printPostorder(root.left); printPostorder(root.right); System.out.print(" " + root.data); } } // post: prints the tree contents, one per line, following an // inorder traversal and using indentation to indicate // node depth; prints right to left so that it looks // correct when the output is rotated. public void printSideways() { printSideways(overallRoot, 0); } // post: prints in reversed preorder the tree with given // root, indenting each line to the given level private void printSideways(IntTreeNode root, int level) { if (root != null) { printSideways(root.right, level + 1); for (int i = 0; i < level; i++) { System.out.print(" "); } System.out.println(root.data); printSideways(root.left, level + 1); } } }
Stuart Reges
Last modified: Mon Nov 15 15:32:53 PST 2010