Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
18 views4 pages

Search Trees

Uploaded by

janakirampilli70
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views4 pages

Search Trees

Uploaded by

janakirampilli70
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

Search Trees

10.Write a Java program that uses recursive functions.


(a) To create a binary search tree.
(b) To count the number of leaf nodes.
(c) To copy the above binary search tree.

Binary Search Tree


A binary search tree is a binary tree that is either empty or in which every node contains a key and
satisfies the conditions:
(1) The key in the left child of a node (if it exists) is less than the key in its parent node.
(2) The key in the right child of a node (if it exists) is greater than the key in its parent node.
(3) The left and right subtrees of the root are again binary search trees.
The first two properties describe the ordering relative to the key in the root node, and that the third
property extends them to all nodes in the tree; hence we can continue to use the recursive structure of
the binary tree. After we examine the root of the tree, we shall move to either its left or right subtree,
and this subtree is again a binary search tree. Thus we can use the same method again on this smaller
tree. This definition assumes that no duplicate keys are permitted.

45
Program 10: Binary search tree operations
25 65
class BSTNode
{
int data; 15 30 55 75
BSTNode left;
BSTNode right; 10 20 50 60 80
BSTNode( int d ) // constructor
{ data = d; }
}

class BinarySearchTree
{
Lab Manual Data Structures through Java

public BSTNode insertTree(BSTNode p, int key) // create BST


{
if( p == null )
p = new BSTNode(key);
else if( key < p.data)
p.left = insertTree( p.left, key);
else p.right = insertTree( p.right, key);
return p; // return root
}

public BSTNode search(BSTNode root, int key)


{
BSTNode p = root; // initialize p with root
while( p != null )
{ if( key == p.data ) return p;
else if( key < p.data ) p = p.left;
else p = p.right;
}
return null;
}

public int leafNodes(BSTNode p)


{
int count = 0;
if( p != null)
{ if((p.left == null) && (p.right == null))
count = 1;
else
count = count + leafNodes(p.left)
+ leafNodes(p.right);
}
return count;
}

public BSTNode deleteTree(BSTNode root, int key)


{
BSTNode p; // refer to node to be deleted
BSTNode parent = root; // refer to parent of node to be deleted
BSTNode inorderSucc; //refer to inorder succ. of node to be deleted
if(root == null)
{ System.out.println("Tree is empty");
return null;
}
p = root; // initialize p with root
/* find node being deleted & its parent */
while( p != null && p.data != key)
{ parent = p;
if( key < p.data) p = p.left;
else p = p.right;
}
if( p == null )
{ System.out.println("\n Node " + key + " not found for deletion");
return null;
}
/* find inorder successor of the node being deleted and its parent */
search Trees

if(p.left != null && p.right != null) // case-3


{ parent = p;
inorderSucc = p.right;
while(inorderSucc.left != null)
{
parent = inorderSucc;
inorderSucc = inorderSucc.left;
}
p.data = inorderSucc.data;
p = inorderSucc;
}
if(p.left == null && p.right == null) // case-1
{
if( parent.left == p ) parent.left = null;
else parent.right = null;
}
if(p.left == null && p.right != null) // case-2(a)
{
if(parent.left == p) parent.left = p.right;
else parent.right = p.right;
}
if(p.left != null && p.right == null) // case-2(b)
{
if(parent.left == p) parent.left = p.left;
else parent.right = p.left;
}
return root;
}
public void inorder(BSTNode p) // 'p' starts with root
{ if( p != null )
{ inorder(p.left);
System.out.print(p.data + " ");
inorder(p.right);
}
}
public void preorder(BSTNode p)
{ if( p != null )
{ System.out.print(p.data + " ");
preorder(p.left);
preorder(p.right);
}
}
public void postorder(BSTNode p)
{ if( p != null )
{ postorder(p.left);
postorder(p.right);
System.out.print(p.data + " ");
}
}

} // end of BinarySearchTree class


////////////////////// BinarySearchTreeDemo.java ////////////////////
class BinarySearchTreeDemo
{ public static void main(String args[])
{
int arr[] = { 45, 25, 15, 10, 20, 30, 65, 55, 50, 60, 75, 80 };

BinarySearchTree bst = new BinarySearchTree();


Lab Manual Data Structures through Java

BSTNode root = null;


// build tree by repeated insertions
for( int i = 0; i < arr.length; i++ )
root = bst.insertTree( root, arr[i]);

BSTNode root2 = root; // copy BST


int key = 66;
BSTNode item = bst.search(root2, key);
if( item != null )
System.out.print("\n item found: " + item.data);
else System.out.print("\n Node " + key + " not found");

System.out.print("\n Number of leaf nodes: " + bst.leafNodes(root));

System.out.print("\n Inorder: ");


bst.inorder(root);
System.out.print("\n Preorder: ");
bst.preorder(root);
System.out.print("\n Postorder: ");
bst.postorder(root);

key = 55; // delete 55


bst.deleteTree(root, key);
System.out.print("\n Inorder, after deletion of " + key + ": ");
bst.inorder(root);

key = 44; // insert 44


bst.insertTree(root, key);
System.out.print("\n Inorder, after insertion of " + key + ": ");
bst.inorder(root);
}
}

Output of this program is as follows:


Node 66 not found
Number of leaf nodes: 6
Inorder: 10 15 20 25 30 45 50 55 60 65 75 80
Preorder: 45 25 15 10 20 30 65 55 50 60 75 80
Postorder: 10 20 15 30 25 50 60 55 80 75 65 45
Inorder, after deletion of 55: 10 15 20 25 30 45 50 60 65 75 80
Inorder, after insertion of 44: 10 15 20 25 30 44 45 50 60 65 75 80

You might also like