Difference between binary tree and binary search tree - data-structures

Can anyone please explain the difference between binary tree and binary search tree with an example?

Binary tree: Tree where each node has up to two leaves
1
/ \
2 3
Binary search tree: Used for searching. A binary tree where the left child contains only nodes with values less than the parent node, and where the right child only contains nodes with values greater than or equal to the parent.
2
/ \
1 3

Binary Tree is a specialized form of tree with two child (left child and right Child).
It is simply representation of data in Tree structure
Binary Search Tree (BST) is a special type of Binary Tree that follows following condition:
left child node is smaller than its parent Node
right child node is greater than its parent Node

A binary tree is made of nodes, where each node contains a "left" pointer, a "right" pointer, and a data element. The "root" pointer points to the topmost node in the tree. The left and right pointers recursively point to smaller "subtrees" on either side. A null pointer represents a binary tree with no elements -- the empty tree. The formal recursive definition is: a binary tree is either empty (represented by a null pointer), or is made of a single node, where the left and right pointers (recursive definition ahead) each point to a binary tree.
A binary search tree (BST) or "ordered binary tree" is a type of binary tree where the nodes are arranged in order: for each node, all elements in its left subtree are less to the node (<), and all the elements in its right subtree are greater than the node (>).
5
/ \
3 6
/ \ \
1 4 9
The tree shown above is a binary search tree -- the "root" node is a 5, and its left subtree nodes (1, 3, 4) are < 5, and its right subtree nodes (6, 9) are > 5. Recursively, each of the subtrees must also obey the binary search tree constraint: in the (1, 3, 4) subtree, the 3 is the root, the 1 < 3 and 4 > 3.
Watch out for the exact wording in the problems -- a "binary search tree" is different from a "binary tree".

As everybody above has explained about the difference between binary tree and binary search tree, i am just adding how to test whether the given binary tree is binary search tree.
boolean b = new Sample().isBinarySearchTree(n1, Integer.MIN_VALUE, Integer.MAX_VALUE);
.......
.......
.......
public boolean isBinarySearchTree(TreeNode node, int min, int max)
{
if(node == null)
{
return true;
}
boolean left = isBinarySearchTree(node.getLeft(), min, node.getValue());
boolean right = isBinarySearchTree(node.getRight(), node.getValue(), max);
return left && right && (node.getValue()<max) && (node.getValue()>=min);
}
Hope it will help you. Sorry if i am diverting from the topic as i felt it's worth mentioning this here.

Binary Tree stands for a data structure which is made up of nodes that can only have two children references.
Binary Search Tree (BST) on the other hand, is a special form of Binary Tree data structure where each node has a comparable value, and smaller valued children attached to left and larger valued children attached to the right.
Thus, all BST's are Binary Tree however only some Binary Tree's may be also BST. Notify that BST is a subset of Binary Tree.
So, Binary Tree is more of a general data-structure than Binary Search Tree. And also you have to notify that Binary Search Tree is a sorted tree whereas there is no such set of rules for generic Binary Tree.
Binary Tree
A Binary Tree which is not a BST;
5
/ \
/ \
9 2
/ \ / \
15 17 19 21
Binary Search Tree (sorted Tree)
A Binary Search Tree which is also a Binary Tree;
50
/ \
/ \
25 75
/ \ / \
20 30 70 80
Binary Search Tree Node property
Also notify that for any parent node in the BST;
All the left nodes have smaller value than the value of the parent node. In the upper example, the nodes with values { 20, 25, 30 } which are all located on the left (left descendants) of 50, are smaller than 50.
All the right nodes have greater value than the value of the parent node. In the upper example, the nodes with values { 70, 75, 80 } which are all located on the right (right descendants) of 50, are greater than 50.
There is no such a rule for Binary Tree Node. The only rule for Binary Tree Node is having two childrens so it self-explains itself that why called binary.

A binary search tree is a special kind of binary tree which exhibits the following property: for any node n, every descendant node's value in the left subtree of n is less than the value of n, and every descendant node's value in the right subtree is greater than the value of n.

Binary tree
Binary tree can be anything which has 2 child and 1 parent. It can be implemented as linked list or array, or with your custom API. Once you start to add more specific rules into it, it becomes more specialized tree. Most common known implementation is that, add smaller nodes on left and larger ones on right.
For example, a labeled binary tree of size 9 and height 3, with a root node whose value is 2. Tree is unbalanced and not sorted.
https://en.wikipedia.org/wiki/Binary_tree
For example, in the tree on the left, A has the 6 children {B,C,D,E,F,G}. It can be converted into the binary tree on the right.
Binary Search
Binary Search is technique/algorithm which is used to find specific item on node chain. Binary search works on sorted arrays.
Binary search compares the target value to the middle element of the array; if they are unequal, the half in which the target cannot lie is eliminated and the search continues on the remaining half until it is successful or the remaining half is empty. https://en.wikipedia.org/wiki/Binary_search_algorithm
A tree representing binary search. The array being searched here is [20, 30, 40, 50, 90, 100], and the target value is 40.
Binary search tree
This is one of the implementations of binary tree. This is specialized for searching.
Binary search tree and B-tree data structures are based on binary search.
Binary search trees (BST), sometimes called ordered or sorted binary trees, are a particular type of container: data structures that store "items" (such as numbers, names etc.) in memory. https://en.wikipedia.org/wiki/Binary_search_tree
A binary search tree of size 9 and depth 3, with 8 at the root. The leaves are not drawn.
And finally great schema for performance comparison of well-known data-structures and algorithms applied:
Image taken from Algorithms (4th Edition)

Binary search tree: when inorder traversal is made on binary tree, you get sorted values of inserted items
Binary tree: no sorted order is found in any kind of traversal

A binary tree is a tree whose children are never more than two. A binary search tree follows the invariant that the left child should have a smaller value than the root node's key, while the right child should have a greater value than the root node's key.

To check wheather or not a given Binary Tree is Binary Search Tree here's is an Alternative Approach .
Traverse Tree In Inorder Fashion (i.e. Left Child --> Parent --> Right Child ) ,
Store Traversed Node Data in a temporary Variable lets say temp , just before storing into temp , Check wheather current Node's data is higher then previous one or not .
Then just break it out , Tree is not Binary Search Tree else traverse untill end.
Below is an example with Java:
public static boolean isBinarySearchTree(Tree root)
{
if(root==null)
return false;
isBinarySearchTree(root.left);
if(tree.data<temp)
return false;
else
temp=tree.data;
isBinarySearchTree(root.right);
return true;
}
Maintain temp variable outside

A tree can be called as a binary tree if and only if the maximum number of children of any of the nodes is two.
A tree can be called as a binary search tree if and only if the maximum number of children of any of the nodes is two and the left child is always smaller than the right child.

In a Binary search tree, all the nodes are arranged in a specific order - nodes to the left of a root node have a smaller value than its root, and all the nodes to the right of a node have values greater than the value of the root.

In a binary tree, each node has 2 child nodes the left node and the right node.
A Binary Search tree is a special kind of tree in which the nodes are sorted, the left node is smaller than the parent node and the left node is bigger than the parent node.
The binary tree allows duplicate values, Binary search tree doesn't allow duplicate values also carrying out any kind of operation is faster in Binary search tree than in Binary tree since BST is sorted

A binary tree is a tree, in which each node can have at most 2 children.
A binary search tree is a further modification of this, giving a certain relationship to the parent and the two children. Since, there are only two children, i.e., left and right child; the relation is defined as follows:
Left Child <= Parent <= Right Child
It is actually, that simple.

Related

Does each level in a binary search tree need to be ordered?

I'm reading about binary search trees, and most resources state that binary search trees need to abide by two rules (vs. regular trees):
Each node has a maximum of up to two children.
For each node, the values of its left descendent nodes are less than that of the current node, which in turn is less than the right descendent nodes (if any).
But does that mean we can have a tree where the levels are not in chronological order? For example, I found this image online and wasn't sure if it was a valid binary search tree since the third level from the top is not in order. So if I wanted to search for the number 4 I wouldn't know whether to search for it in the left or right branch.
This is not a binary search tree, as descendent nodes of a node u include all nodes that can be accessed going down a path starting at u.
Here 11 -> 12 -> 4 is a path down from 11, going first through the right child 12, so 4 is a right descendent node of 11. Since its value is smaller, this tree is not a binary search tree.
As a consequence of these rules, all layers are indeed sorted. In fact the whole in-order traversal is sorted.

Binary Search Tree Rules

Why is this Binary tree considered as an invalid Binary Search Tree:
Binary Tree: In computer science, a binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.
Binary Search Tree: In computer science, a binary search tree (BST), also called an ordered or sorted binary tree, is a rooted binary tree data structure whose internal nodes each store a key greater than all the keys in the node’s left subtree and less than those in its right subtree.
Notice that, definition involves the term subtree, not child. I think there is a little confusion in your mind about that.
Correct definiton: store a key greater than all the keys in the node’s left subtree and less than those in its right subtree
Incorrect definition: store a key greater than all the keys in the node’s left child and less than those in its right child.
Why subtree? Well because we want to perform the insert operation in a definite way: If we put 17, 6 and 19 to our binary tree and looking for a node place to insert 22, where should we put it?
If the second definition was true, then where to place 22 would be indefinite. We could have placed it as right child of 9 or right child of 19.
First definition requires us to put it as right child of 19.
References:
Binary Tree
Binary Search Tree
The value 22 is misplaced. The nodes at the left of the root (17) should never be greater than it. This is not only the rule for the immediate child (6), but must be true for all of the left subtree.
Just imagine you would search this tree for value 22 using a binary search: then you would compare 22 with the root's value and decide to look in the right subtree (because it is greater). You would not find it there, and so you would conclude that the tree does not have the value 22.

When configuring a binary tree, is it possible to just increase the height to a null node?

For example, can such a binary tree exist?
A
/ \
N N
/ \ / \
N B C N
It's just a question out of my curiosity.
Yeah, this tree can exist. The main rule of binary tree is it can have maximum of two children.
However, there is Binary search tree. BST is a binary tree, but it has more conditions:
All the keys (data inside the node) are unique/distinct.
Every left child key value of every parent node, is smaller than the parent node key value.
Every right child key value of every parent node, is larger than the parent node key value.

Binary Tree with negative values

I was solving a data structure problem and I came across a Binary Tree problem:
Find the maximum node in a binary tree, return the node.
Given the following BST
1
/ \
-5 2
/ \ / \
0 3 -4 -5
I thought that in a Binary Tree, every node's key is greater than all keys in its left sub-tree, and less than all keys in its right sub-tree.
Can a Binary Tree be unsorted ?
A binary search tree is supposed to be sorted and ordered.
But a binary tree can be unsorted like the one you have shown. Binary search tree is a type of binary tree which happened to be sorted.
I thought that in a Binary Tree, every node's key is greater than all
keys in its left sub-tree, and less than all keys in its right
sub-tree.
That's property of Binary Search Tree.
Binary tree can be unsorted, but it isn't suitable for lookup (it doesn't have log(n) complexity).

What is a valid binary search tree?

I was just coming up with an example for an algorithm I'm working on and realised I don't understand whether the following binary tree is a binary search tree:
3
/ \
2 4
/ \
1 3
The reason I'm unsure is because:
there are duplicates in the tree (3)
Is the rule with binary search trees that all values in the left subtree are smaller than the root?
This is binary search tree..
1) If you traverse it in IN-ORDER you will get the sorted list
2) Every element on the left node is less than root node (in value)
3) As far as the duplication is concerned, it is okay, since the in-order traversal will return 1,2,3,3,4
Yes, the left subtree's nodes' key value is less then the node's key value; and the right subtree's nodes' key value is greater then the node's key value; [here is the binary_serch_tree wiki]: http://en.wikipedia.org/wiki/Binary_search_tree

Resources