JAVA EXAMPLE PROGRAMS

JAVA EXAMPLE PROGRAMS

Publish Your Article Here

Program: How to check the given Binary Tree is Binary Search Tree (BST) or not?


Description:

In a Binary Tree, each node can have at most two nodes. For a binary tree to be a binary search tree (BST), the data of all the nodes in the left sub-tree of the root node should be less than or equals to the data of the root. The data of all the nodes in the right subtree of the root node should be greater than the data of the root.

There are various ways to validate Binary Search Tree. One of the simple way is: The in-order traversal of a binary search tree results natural order. So, we can do in-order traversal and check for natural order. If the order sorted, then it is binary search tree. We will give this implementation in the coming pages.

In this page we follow different approach. We will set min and max value for each node and validate node data against min and max value. The same approach will continue for each left and right sub binary search tree in recursive way.

Here is the steps to validate binary search tree:

  1. Start with root node. In this case root node data min & max values can be extreme integer ranges. Pass min value as Integer.MIN_VALUE and max value as Integer.MAX_VALUE.
  2. Make sure node data is falling under min & max values.
  3. Along with the above check, make sure the left and right sub trees are also go through similar checks.
  4. Make a recursive call on left node with no change in min value and node data as max value.
  5. Make a recursive call on right node with node data as min value and no change in max value.
  6. Check the the code for better understanding.


IsBinarySearchTree
package com.java2novice.ds;

public class IsBinarySearchTree {

	public boolean isBinarySearchTree(BstNode root) {

		if(root == null) return Boolean.TRUE;
		return isBstValid(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
	}

	private boolean isBstValid(BstNode root, Integer minValue, Integer maxValue) {

		if(root == null) return Boolean.TRUE;
		if(root.getData() >= minValue && root.getData() < maxValue
				&& isBstValid(root.getLeft(), minValue, root.getData())
				&& isBstValid(root.getRight(), root.getData(), maxValue)) {
			return Boolean.TRUE;
		} else {
			return Boolean.FALSE;
		}
	}
}

BstNode
package com.java2novice.ds;

public class BstNode {

	private BstNode left;
	private BstNode right;
	private Integer data;

	public BstNode(Integer data) {
		this.data = data;
	}

	public BstNode getLeft() {
		return left;
	}
	public void setLeft(BstNode left) {
		this.left = left;
	}
	public BstNode getRight() {
		return right;
	}
	public void setRight(BstNode right) {
		this.right = right;
	}

	public Integer getData() {
		return data;
	}
}

Input Tree:
                3
              /   \
             2     6
            / \   / \
           1   4 5   7
                        

Input Tree in main method:
    public static void main(String a[]) {

		BstNode root = new BstNode(3);
		// left sub tree
		BstNode node_2 = new BstNode(2); root.setLeft(node_2);
		BstNode node_1 = new BstNode(1); node_2.setLeft(node_1);
		BstNode node_4 = new BstNode(4); node_2.setRight(node_4);
		// right sub tree
		BstNode node_6 = new BstNode(6); root.setRight(node_6);
		BstNode node_5 = new BstNode(5); node_6.setLeft(node_5);
		BstNode node_7 = new BstNode(7); node_6.setRight(node_7);

		IsBinarySearchTree ibsTree = new IsBinarySearchTree();
		System.out.println(ibsTree.isBinarySearchTree(root));
	}
                        

Output:
false

Input Tree:
                8
              /   \
             3     10
            / \      \
           1   6     14
                        

Input Tree in main method:
    public static void main(String a[]) {

		BstNode root = new BstNode(8);
		// left sub tree
		BstNode node_3 = new BstNode(3); root.setLeft(node_3);
		BstNode node_1 = new BstNode(1); node_3.setLeft(node_1);
		BstNode node_6 = new BstNode(6); node_3.setRight(node_6);
		// right sub tree
		BstNode node_10 = new BstNode(10); root.setRight(node_10);
		BstNode node_14 = new BstNode(14); node_10.setRight(node_14);

		IsBinarySearchTree ibsTree = new IsBinarySearchTree();
		System.out.println(ibsTree.isBinarySearchTree(root));
	}
                        

Output:
true
<< Previous Program | Next Program >>

List Of All Interview Programs:

  1. How to reverse Singly Linked List?
  2. Find out duplicate number between 1 to N numbers.
  3. Find out middle index where sum of both ends are equal.
  4. Write a singleton class.
  5. Write a program to create deadlock between two threads.
  6. Write a program to reverse a string using recursive algorithm.
  7. Write a program to reverse a number.
  8. Write a program to convert decimal number to binary format.
  9. Write a program to find perfect number or not.
  10. Write a program to implement ArrayList.
  11. Write a program to find maximum repeated words from a file.
  12. Wrie a program to find out duplicate characters in a string.
  13. Write a program to find top two maximum numbers in a array.
  14. Write a program to sort a map by value.
  15. Write a program to find common elements between two arrays.
  16. How to swap two numbers without using temporary variable?
  17. Write a program to print fibonacci series.
  18. Write a program to find sum of each digit in the given number using recursion.
  19. Write a program to check the given number is a prime number or not?
  20. Write a program to find the given number is Armstrong number or not?
  21. Write a program to convert binary to decimal number.
  22. Write a program to check the given number is binary number or not?
  23. Write a program for Bubble Sort in java.
  24. Write a program for Insertion Sort in java.
  25. Write a program to implement hashcode and equals.
  26. How to get distinct elements from an array by avoiding duplicate elements?
  27. Write a program to get distinct word list from the given file.
  28. Write a program to get a line with max word count from the given file.
  29. Write a program to convert string to number without using Integer.parseInt() method.
  30. Write a program to find two lines with max characters in descending order.
  31. Write a program to find the sum of the first 1000 prime numbers.
  32. Find longest substring without repeating characters.
  33. Write a program to remove duplicates from sorted array.
  34. How to sort a Stack using a temporary Stack?
  35. Write a program to print all permutations of a given string.
  36. Implement Binary Search Tree (BST)
  37. Find min and max value from Binary Search Tree (BST)
  38. Find height of a Binary Search Tree (BST)
  39. Implement Binary Search Tree (BST) Level order traversal (breadth first).
  40. Implement Binary Search Tree (BST) pre-order traversal (depth first).
  41. Implement Binary Search Tree (BST) in-order traversal (depth first).
  42. Implement Binary Search Tree (BST) post-order traversal (depth first).
  43. How to check the given Binary Tree is Binary Search Tree (BST) or not?
  44. How to delete a node from Binary Search Tree (BST)?
Knowledge Centre
When to use LinkedList or ArrayList?
Accessing elements are faster with ArrayList, because it is index based. But accessing is difficult with LinkedList. It is slow access. This is to access any element, you need to navigate through the elements one by one. But insertion and deletion is much faster with LinkedList, because if you know the node, just change the pointers before or after nodes. Insertion and deletion is slow with ArrayList, this is because, during these operations ArrayList need to adjust the indexes according to deletion or insetion if you are performing on middle indexes. Means, an ArrayList having 10 elements, if you are inserting at index 5, then you need to shift the indexes above 5 to one more.
Famous Quotations
It is amazing what you can accomplish if you do not care who gets the credit.
-- Harry Truman

About Author

I'm Nataraja Gootooru, programmer by profession and passionate about technologies. All examples given here are as simple as possible to help beginners. The source code is compiled and tested in my dev environment.

If you come across any mistakes or bugs, please email me to [email protected].

Most Visited Pages

Other Interesting Sites

Reference: Java™ Platform Standard Ed. 7 - API Specification | Java™ Platform Standard Ed. 8 - API Specification | Java is registered trademark of Oracle.
Privacy Policy | Copyright © 2017 by Nataraja Gootooru. All Rights Reserved.