1 // Fig. 17.16: Tree.java 2 package com.deitel.jhtp2.ch17; 3 4 // Class TreeNode definition 5 class TreeNode { 6 // friendly access members 7 TreeNode left; // left node 8 int data; // data item 9 TreeNode right; // right node 10 11 // Constructor: initialize data to d and make this a leaf node 12 public TreeNode( int d ) 13 { 14 data = d; 15 left = right = null; // this node has no children 16 } 17 18 // Insert a TreeNode into a Tree that contains nodes. 19 // Ignore duplicate values. 20 public synchronized void insert( int d ) 21 { 22 if ( d < data ) { 23 if ( left == null ) 24 left = new TreeNode( d ); 25 else 26 left.insert( d ); 27 } 28 else if ( d > data ) { 29 if ( right == null ) 30 right = new TreeNode( d ); 31 else 32 right.insert( d ); 33 } 34 } 35 } 36 37 // Class Tree definition 38 public class Tree { 39 private TreeNode root; 40 41 // Construct an empty Tree of integers 42 public Tree() { root = null; } 43 44 // Insert a new node in the binary search tree. 45 // If the root node is null, create the root node here. 46 // Otherwise, call the insert method of class TreeNode. 47 public synchronized void insertNode( int d ) 48 { 49 if ( root == null ) 50 root = new TreeNode( d ); 51 else 52 root.insert( d ); 53 } 54 55 // Preorder Traversal 56 public void preorderTraversal() { preorderHelper( root ); } 57 58 // Recursive method to perform preorder traversal 59 private void preorderHelper( TreeNode node ) 60 { 61 if ( node == null ) 62 return; 63 64 System.out.print( node.data + " " ); 65 preorderHelper( node.left ); 66 preorderHelper( node.right ); 67 } 68 69 // Inorder Traversal 70 public void inorderTraversal() { inorderHelper( root ); } 71 72 // Recursive method to perform inorder traversal 73 private void inorderHelper( TreeNode node ) 74 { 75 if ( node == null ) 76 return; 77 78 inorderHelper( node.left ); 79 System.out.print( node.data + " " ); 80 inorderHelper( node.right ); 81 } 82 83 // Postorder Traversal 84 public void postorderTraversal() { postorderHelper( root ); } 85 86 // Recursive method to perform postorder traversal 87 private void postorderHelper( TreeNode node ) 88 { 89 if ( node == null ) 90 return; 91 92 postorderHelper( node.left ); 93 postorderHelper( node.right ); 94 System.out.print( node.data + " " ); 95 } 96 }