

{"id":98533,"date":"2021-07-22T09:00:14","date_gmt":"2021-07-22T03:30:14","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=98533"},"modified":"2021-07-20T14:06:35","modified_gmt":"2021-07-20T08:36:35","slug":"binary-search-tree","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/","title":{"rendered":"Binary Search Tree Data Structure"},"content":{"rendered":"<p>As we discussed in the previous article, the binary search tree is one of the types of trees with some specific properties. A binary search tree is quick, efficient, and easy to implement. In this article, we will learn the working of a binary search tree, its properties, and its implementation.<\/p>\n<h3>Binary search tree<\/h3>\n<p>BST, short for Binary search tree is a binary tree with specific following properties.<\/p>\n<p>1. The nodes in the left subtree must be less than the root node<br \/>\n2. The nodes in the right subtree must be greater than the root node.<br \/>\n3. The left and the right subtrees must also be binary trees.<\/p>\n<p>The above properties apply to each node of the binary tree for it to be a BST.<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98542\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image01.jpg\" alt=\"Binary search tree in DS\" width=\"416\" height=\"353\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image01.jpg 416w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image01-320x272.jpg 320w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/a><\/p>\n<h3>Operations on Binary Search Tree in data Structure<\/h3>\n<h4>1. Searching in BST<\/h4>\n<p>Finding the location of an element in the BST<\/p>\n<h4>Algorithm<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">search(root)\r\nIf root == NULL \r\n    return NULL;\r\nIf Value == root-&gt;data \r\n    return root-&gt;data;\r\nIf Value &lt; root-&gt;data \r\n    return search(root-&gt;left)\r\nIf Value &gt; root-&gt;data \r\n    return search(root-&gt;right)\r\n\r\n<\/pre>\n<h4>2. Inserting element in BST<\/h4>\n<p>Inserting a new element in the BST<\/p>\n<h4>Algorithm<\/h4>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">createNode(newvalue)\r\nIf node == NULL \r\n    return createNode(newvalue)\r\nif (newvalue &lt; node-&gt;data)\r\n    node-&gt;left  = insert(node-&gt;left, newvalue);\r\nelse if (newvalue &gt; node-&gt;data)\r\n    node-&gt;right = insert(node-&gt;right, newvalue);  \r\nreturn node;\r\n<\/pre>\n<h4>3. Deleting element from BST<\/h4>\n<p>deleting an existing element from BST<\/p>\n<p><strong>Case 1<\/strong>: if a node is to be deleted from the Leaf node.<\/p>\n<ul>\n<li>Simply Delete the node from the leaf node.<\/li>\n<\/ul>\n<p><strong>Case 2:<\/strong> if the node that has to be deleted has 1 child<\/p>\n<ul>\n<li>Replace node with the child node<\/li>\n<li>Remove child node from the original position<\/li>\n<\/ul>\n<p><strong>Case 3:<\/strong> if the node that has to be deleted has 2 child<\/p>\n<ul>\n<li>Retrieve inorder successor of the node.<\/li>\n<li>Replace node with the inorder successor<\/li>\n<li>Remove inorder successor from its original position.<\/li>\n<\/ul>\n<h3>Working of Binary Search Tree<\/h3>\n<p>Let us take an example to demonstrate the working of BST with insert and delete operations<\/p>\n<p><strong>Step 1:<\/strong> insert 50<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98543\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image02.jpg\" alt=\"Insertion in BST\" width=\"101\" height=\"102\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image02.jpg 101w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image02-80x80.jpg 80w\" sizes=\"auto, (max-width: 101px) 100vw, 101px\" \/><\/a><\/p>\n<p><strong>Step 2:<\/strong> insert 75<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image03.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98544\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image03.jpg\" alt=\"Working of BST\" width=\"166\" height=\"172\" \/><\/a><\/p>\n<p><strong>Step 3:<\/strong> insert 90<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image04.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98545\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image04.jpg\" alt=\"Inserting Element in BST\" width=\"214\" height=\"245\" \/><\/a><\/p>\n<p><strong>Step 4:<\/strong> insert 25<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image05.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98546\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image05.jpg\" alt=\"Binary search tree Working\" width=\"264\" height=\"245\" \/><\/a><\/p>\n<p><strong>Step 5:<\/strong> insert 40<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98547\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image6.jpg\" alt=\"Insertion in Binary search tree\" width=\"264\" height=\"245\" \/><\/a><\/p>\n<p><strong>Step 6:<\/strong> insert 62<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98548\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image7.jpg\" alt=\"Binary search tree in DS\" width=\"354\" height=\"245\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image7.jpg 354w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image7-320x221.jpg 320w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<p><strong>Step 7:<\/strong> insert 70<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image8.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98549\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image8.jpg\" alt=\"Insertion in BST\" width=\"354\" height=\"335\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image8.jpg 354w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image8-320x303.jpg 320w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<p><strong>Step 8:<\/strong> delete 90. This is case 1 deletion.<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image9.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98550\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image9.jpg\" alt=\"Deletion in BST\" width=\"301\" height=\"335\" \/><\/a><\/p>\n<p><strong>Step 9:<\/strong> insert 92<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image10.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98551\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image10.jpg\" alt=\"Element Insertion in BFS\" width=\"354\" height=\"335\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image10.jpg 354w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image10-320x303.jpg 320w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<p><strong>Step 10:<\/strong> delete 25. This is case 2 deletion.<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98552\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image11.jpg\" alt=\"Deletion in BFS\" width=\"354\" height=\"335\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image11.jpg 354w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image11-320x303.jpg 320w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<p><strong>Step 11:<\/strong> delete 75. This is case 3 deletion.<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image12.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98553\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image12.jpg\" alt=\"Deletion in BFS\" width=\"354\" height=\"255\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image12.jpg 354w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image12-320x231.jpg 320w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<p><strong>Step 12:<\/strong> insert 30<\/p>\n<p><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image13.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-98554\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image13.jpg\" alt=\"Binary search tree in DS\" width=\"404\" height=\"255\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image13.jpg 404w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS-normal-image13-320x202.jpg 320w\" sizes=\"auto, (max-width: 404px) 100vw, 404px\" \/><\/a><\/p>\n<h3>Implementation of Binary Search Tree in C<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\r\nstruct node \r\n{\r\n  int key;\r\n  struct node *left, *right;\r\n};\r\n\r\nstruct node *newNode(int item) \r\n{\r\n  struct node *temp = (struct node *)malloc(sizeof(struct node));\r\n  temp-&gt;key = item;\r\n  temp-&gt;left = temp-&gt;right = NULL;\r\n  return temp;\r\n}\r\n\r\nvoid inorderTraversal(struct node *root) \r\n{\r\n  if (root != NULL) \r\n  {\r\n    inorderTraversal(root-&gt;left);\r\n\r\n    printf(\"%d -&gt; \", root-&gt;key);\r\n\r\n    inorderTraversal(root-&gt;right);\r\n  }\r\n}\r\n\r\nstruct node *insertNew(struct node *node, int Value)\r\n{\r\n  if (node == NULL) return newNode(Value);\r\n\r\n  if (Value&lt; node-&gt;key)\r\n    node-&gt;left = insertNew(node-&gt;left, Value);\r\n  else\r\n    node-&gt;right = insertNew(node-&gt;right, Value);\r\n\r\n  return node;\r\n}\r\n\r\nstruct node *minValueNode(struct node *node) \r\n{\r\n  struct node *current = node;\r\n\r\n  while (current &amp;&amp; current-&gt;left != NULL)\r\n    current = current-&gt;left;\r\n\r\n  return current;\r\n}\r\n\r\nstruct node *deleteNode(struct node *root, int Value) \r\n{\r\n  if (root == NULL) return root;\r\n\r\n  if (Value &lt; root-&gt;key)\r\n    root-&gt;left = deleteNode(root-&gt;left, Value);\r\n  else if (Value &gt; root-&gt;key)\r\n    root-&gt;right = deleteNode(root-&gt;right, Value);\r\n\r\n  else \r\n  {\r\n    if (root-&gt;left == NULL) \r\n    {\r\n      struct node *temp = root-&gt;right;\r\n      free(root);\r\n      return temp;\r\n    } else if (root-&gt;right == NULL) {\r\n      struct node *temp = root-&gt;left;\r\n      free(root);\r\n      return temp;\r\n    }\r\n\r\n    struct node *temp = minValueNode(root-&gt;right);\r\n    root-&gt;key = temp-&gt;key;\r\n\r\n    root-&gt;right = deleteNode(root-&gt;right, temp-&gt;key);\r\n  }\r\n  return root;\r\n}\r\n\r\nint main() {\r\n  struct node *root = NULL;\r\n  root = insertNew(root, 8);\r\n  root = insertNew(root, 3);\r\n  root = insertNew(root, 1);\r\n  root = insertNew(root, 6);\r\n  root = insertNew(root, 7);\r\n  root = insertNew(root, 10);\r\n  root = insertNew(root, 14);\r\n  root = insertNew(root, 4);\r\n\r\n  printf(\"Inorder traversal: \");\r\n  inorderTraversal(root);\r\n\r\n  printf(\"\\nAfter deleting 10\\n\");\r\n  root = deleteNode(root, 10);\r\n  printf(\"Inorder traversal: \");\r\n  inorderTraversal(root);\r\n}\r\n\r\n<\/pre>\n<h3>Binary Search Tree Implementation in C++<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;iostream&gt;\r\nusing namespace std;\r\n\r\nstruct node \r\n{\r\n  int key;\r\n  struct node *left, *right;\r\n};\r\n\r\nstruct node *newNode(int item) \r\n{\r\n  struct node *temp = (struct node *)malloc(sizeof(struct node));\r\n  temp-&gt;key = item;\r\n  temp-&gt;left = temp-&gt;right = NULL;\r\n  return temp;\r\n}\r\n\r\nvoid inorderTraversal(struct node *root) \r\n{\r\n  if (root != NULL) \r\n  {\r\n    inorderTraversal(root-&gt;left);\r\n\r\n    printf(\"%d -&gt; \", root-&gt;key);\r\n\r\n    inorderTraversal(root-&gt;right);\r\n  }\r\n}\r\n\r\nstruct node *insertNew(struct node *node, int Value)\r\n{\r\n  if (node == NULL) return newNode(Value);\r\n\r\n  if (Value&lt; node-&gt;key)\r\n    node-&gt;left = insertNew(node-&gt;left, Value);\r\n  else\r\n    node-&gt;right = insertNew(node-&gt;right, Value);\r\n\r\n  return node;\r\n}\r\n\r\nstruct node *minValueNode(struct node *node) \r\n{\r\n  struct node *current = node;\r\n\r\n  while (current &amp;&amp; current-&gt;left != NULL)\r\n    current = current-&gt;left;\r\n\r\n  return current;\r\n}\r\n\r\nstruct node *deleteNode(struct node *root, int Value) \r\n{\r\n  if (root == NULL) return root;\r\n\r\n  if (Value &lt; root-&gt;key)\r\n    root-&gt;left = deleteNode(root-&gt;left, Value);\r\n  else if (Value &gt; root-&gt;key)\r\n    root-&gt;right = deleteNode(root-&gt;right, Value);\r\n\r\n  else \r\n  {\r\n    if (root-&gt;left == NULL) \r\n    {\r\n      struct node *temp = root-&gt;right;\r\n      free(root);\r\n      return temp;\r\n    } else if (root-&gt;right == NULL) {\r\n      struct node *temp = root-&gt;left;\r\n      free(root);\r\n      return temp;\r\n    }\r\n\r\n    struct node *temp = minValueNode(root-&gt;right);\r\n    root-&gt;key = temp-&gt;key;\r\n\r\n    root-&gt;right = deleteNode(root-&gt;right, temp-&gt;key);\r\n  }\r\n  return root;\r\n}\r\n\r\nint main() {\r\n  struct node *root = NULL;\r\n  root = insertNew(root, 8);\r\n  root = insertNew(root, 3);\r\n  root = insertNew(root, 1);\r\n  root = insertNew(root, 6);\r\n  root = insertNew(root, 7);\r\n  root = insertNew(root, 10);\r\n  root = insertNew(root, 14);\r\n  root = insertNew(root, 4);\r\n\r\n  cout &lt;&lt; \"Inorder traversal: \";\r\n  inorderTraversal(root);\r\n\r\n  cout &lt;&lt; \"\\nAfter deleting 10\\n\";\r\n  root = deleteNode(root, 10);\r\n  cout &lt;&lt; \"Inorder traversal: \";\r\n  inorderTraversal(root);\r\n}\r\n<\/pre>\n<h3>BST Implementation in JAVA<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class BinarySearchTree \r\n{\r\n  class Node \r\n  {\r\n    int key;\r\n    Node left, right;\r\n\r\n    public Node(int item)\r\n    {\r\n      key = item;\r\n      left = right = null;\r\n    }\r\n  }\r\n\r\n  Node root;\r\n\r\n  BinarySearchTree()\r\n  {\r\n    root = null;\r\n  }\r\n\r\n  void insert(int key)\r\n  {\r\n    root = insertKey(root, key);\r\n  }\r\n\r\n  Node insertKey(Node root, int key) \r\n  {\r\n    if (root == null) {\r\n      root = new Node(key);\r\n      return root;\r\n    }\r\n\r\n    if (key &lt; root.key)\r\n      root.left = insertKey(root.left, key);\r\n    else if (key &gt; root.key)\r\n      root.right = insertKey(root.right, key);\r\n\r\n    return root;\r\n  }\r\n\r\n  void inorder() \r\n  {\r\n    inorderRec(root);\r\n  }\r\n\r\n  void inorderRec(Node root) \r\n  {\r\n    if (root != null) \r\n    {\r\n      inorderRec(root.left);\r\n      System.out.print(root.key + \" -&gt; \");\r\n      inorderRec(root.right);\r\n    }\r\n  }\r\n\r\n  void deleteKey(int key)\r\n  {\r\n    root = deleteRec(root, key);\r\n  }\r\n\r\n  Node deleteRec(Node root, int key) \r\n  {\r\n    if (root == null)\r\n      return root;\r\n\r\n    if (key &lt; root.key)\r\n      root.left = deleteRec(root.left, key);\r\n    else if (key &gt; root.key)\r\n      root.right = deleteRec(root.right, key);\r\n    else \r\n    {\r\n      if (root.left == null)\r\n        return root.right;\r\n      else if (root.right == null)\r\n        return root.left;\r\n        \r\n      root.key = minValue(root.right);\r\n\r\n      root.right = deleteRec(root.right, root.key);\r\n    }\r\n\r\n    return root;\r\n  }\r\n\r\n  int minValue(Node root) \r\n  {\r\n    int minv = root.key;\r\n    while (root.left != null) \r\n    {\r\n      minv = root.left.key;\r\n      root = root.left;\r\n    }\r\n    return minv;\r\n  }\r\n\r\n  public static void main(String[] args) \r\n  {\r\n    BinarySearchTree tree = new BinarySearchTree();\r\n\r\n    tree.insert(8);\r\n    tree.insert(3);\r\n    tree.insert(1);\r\n    tree.insert(6);\r\n    tree.insert(7);\r\n    tree.insert(10);\r\n    tree.insert(14);\r\n    tree.insert(4);\r\n\r\n    System.out.print(\"Inorder traversal: \");\r\n    tree.inorder();\r\n\r\n    System.out.println(\"\\n\\nAfter deleting 10\");\r\n    tree.deleteKey(10);\r\n    System.out.print(\"Inorder traversal: \");\r\n    tree.inorder();\r\n  }\r\n}\r\n<\/pre>\n<h3>Binary Search Tree Implementation in Python<\/h3>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">class Node:\r\n    def __init__(self, key):\r\n        self.key = key\r\n        self.left = None\r\n        self.right = None\r\n\r\ndef inorderTraversal(root):\r\n    if root is not None:\r\n        inorderTraversal(root.left)\r\n        print(str(root.key) + \"-&gt;\", end=' ')\r\n        inorderTraversal(root.right)\r\n\r\ndef insertnew(node, value):\r\n\r\n    if node is None:\r\n        return Node(value)\r\n    if value&lt; node.key:\r\n        node.left = insertnew(node.left, value)\r\n    else:\r\n        node.right = insertnew(node.right, value)\r\n\r\n    return node\r\n\r\ndef minValueNode(node):\r\n    current = node\r\n\r\n    while(current.left is not None):\r\n        current = current.left\r\n\r\n    return current\r\n\r\ndef deleteNode(root, value):\r\n\r\n    if root is None:\r\n        return root\r\n    if value &lt; root.key:\r\n        root.left = deleteNode(root.left, value)\r\n    elif(value&gt; root.key):\r\n        root.right = deleteNode(root.right, value)\r\n    else:\r\n        if root.left is None:\r\n            temp = root.right\r\n            root = None\r\n            return temp\r\n\r\n        elif root.right is None:\r\n            temp = root.left\r\n            root = None\r\n            return temp\r\n\r\n        temp = minValueNode(root.right)\r\n\r\n        root.key = temp.key\r\n        root.right = deleteNode(root.right, temp.key)\r\n\r\n    return root\r\n\r\n\r\nroot = None\r\nroot = insertnew(root, 8)\r\nroot = insertnew(root, 3)\r\nroot = insertnew(root, 1)\r\nroot = insertnew(root, 6)\r\nroot = insertnew(root, 7)\r\nroot = insertnew(root, 10)\r\nroot = insertnew(root, 14)\r\nroot = insertnew(root, 4)\r\n\r\nprint(\"Inorder traversal: \", end=' ')\r\ninorderTraversal(root)\r\n\r\nprint(\"\\nDelete 10\")\r\nroot = deleteNode(root, 10)\r\nprint(\"Inorder traversal: \", end=' ')\r\ninorderTraversal(root)\r\n<\/pre>\n<h3>Advantages of Binary Search Tree<\/h3>\n<p>1. Searching is very easy in BST. At each step, we get to know which subtree might contain the element.<br \/>\n2. Insertion and deletion in BST is faster than arrays or linked lists<br \/>\n3. BST is very efficient in terms of complexity.<\/p>\n<h3>Complexity of Binary Search Tree<\/h3>\n<p>Space complexity for all operations in BST in O(n)<\/p>\n<table>\n<tbody>\n<tr>\n<td><strong>Operation\u00a0<\/strong><\/td>\n<td><strong>Best case<\/strong><\/td>\n<td><strong>Average case<\/strong><\/td>\n<td><strong>Worst Case<\/strong><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Searching\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(n)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Insertion\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(n)<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">deletion<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(log n)<\/span><\/td>\n<td><span style=\"font-weight: 400;\">O(n)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Applications of BST<\/h3>\n<p>1. It is implemented for dynamic sorting<br \/>\n2. It manages virtual memory area in UNIX kernel<br \/>\n3. It&#8217;s useful for multilevel indexing in database<\/p>\n<h3>Conclusion<\/h3>\n<p>BST is a fast and efficient algorithm with many real-world applications and advantages. We learned working and implementation of BST in different programming languages. In future articles, we will learn about AVL trees and, B-Tree, etc.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As we discussed in the previous article, the binary search tree is one of the types of trees with some specific properties. A binary search tree is quick, efficient, and easy to implement. In&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":98541,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24020],"tags":[24803,24802,1992,24805,24804,24801,19730,24806,24808,24807],"class_list":["post-98533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-structure-tutorials","tag-advantages-of-binary-search-tree","tag-applications-of-binary-search-tree","tag-binary-search-tree","tag-binary-search-tree-implementation-in-c","tag-binary-search-tree-implementation-in-python","tag-complexity-of-binary-search-tree","tag-data-structure","tag-implementation-of-binary-search-tree-in-c","tag-operations-on-binary-search-tree","tag-working-of-binary-search-tree"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Binary Search Tree Data Structure - DataFlair<\/title>\n<meta name=\"description\" content=\"Binary Search Tree is a fast and efficient algorithm with many real-world applications and advantages. Learn its working and implementation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/binary-search-tree\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Binary Search Tree Data Structure - DataFlair\" \/>\n<meta property=\"og:description\" content=\"Binary Search Tree is a fast and efficient algorithm with many real-world applications and advantages. Learn its working and implementation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/binary-search-tree\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-22T03:30:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Binary Search Tree Data Structure - DataFlair","description":"Binary Search Tree is a fast and efficient algorithm with many real-world applications and advantages. Learn its working and implementation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/","og_locale":"en_US","og_type":"article","og_title":"Binary Search Tree Data Structure - DataFlair","og_description":"Binary Search Tree is a fast and efficient algorithm with many real-world applications and advantages. Learn its working and implementation.","og_url":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2021-07-22T03:30:14+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/b49855299264df5e27e3ec6c2cd9fde9"},"headline":"Binary Search Tree Data Structure","datePublished":"2021-07-22T03:30:14+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/"},"wordCount":479,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg","keywords":["Advantages of Binary Search Tree","Applications of Binary Search Tree","Binary Search Tree","Binary Search Tree Implementation in C++","Binary Search Tree Implementation in Python","Complexity of Binary Search Tree","Data Structure","Implementation of Binary Search Tree in C","Operations on Binary Search Tree","Working of Binary Search Tree"],"articleSection":["Data Structure Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/binary-search-tree\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/","url":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/","name":"Binary Search Tree Data Structure - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg","datePublished":"2021-07-22T03:30:14+00:00","description":"Binary Search Tree is a fast and efficient algorithm with many real-world applications and advantages. Learn its working and implementation.","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/binary-search-tree\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2021\/07\/Binary-search-tree-in-DS.jpg","width":1200,"height":628,"caption":"Binary search tree in DS"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/binary-search-tree\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Data Structure Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/data-structure-tutorials\/"},{"@type":"ListItem","position":3,"name":"Binary Search Tree Data Structure"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/b49855299264df5e27e3ec6c2cd9fde9","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ef46b745ddad2fad690af626c6ef29b91809ad0a9f5ef398d07817d8cad042f5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ef46b745ddad2fad690af626c6ef29b91809ad0a9f5ef398d07817d8cad042f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ef46b745ddad2fad690af626c6ef29b91809ad0a9f5ef398d07817d8cad042f5?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team is a group of passionate educators and industry experts dedicated to providing high-quality online learning resources on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. With years of experience in the field, the team aims to simplify complex topics and help learners advance their careers. At DataFlair, we believe in empowering students and professionals with the knowledge and skills needed to thrive in today\u2019s fast-paced tech industry. Follow us for Free courses, expert insights, tutorials, and practical tips to boost your learning journey.","url":"https:\/\/data-flair.training\/blogs\/author\/datafbdad\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/98533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=98533"}],"version-history":[{"count":4,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/98533\/revisions"}],"predecessor-version":[{"id":98557,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/98533\/revisions\/98557"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/98541"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=98533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=98533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=98533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}