{"id":1003,"date":"2022-09-08T11:43:07","date_gmt":"2022-11-09T23:23:48","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/uncategorized\/a-binary-tree-with-a-minimum-heap-structure\/"},"modified":"2025-07-18T16:48:57","modified_gmt":"2025-07-18T16:48:57","slug":"a-binary-tree-with-a-minimum-heap-structure","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/","title":{"rendered":"A Binary Tree with a minimum heap structure."},"content":{"rendered":"<p>A Min Heap Binary Tree refers to a type of Binary Tree where the root node has the smallest key value among all nodes in the tree.<\/p>\n<p>The Min Heap property is applicable to all sub-trees in the tree, as stated in the definition above.<\/p>\n<p>With the exception of the last 2 layers, almost all nodes, except for the final 2 layers, should possess two offspring. Essentially, this resembles a nearly complete binary tree.<\/p>\n<p>The tree shown below exemplifies a binary tree of minimum heap type, as it complies with the aforementioned two conditions.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/4-0.png\" alt=\"Min Heap Btree\" \/><\/div>\n<p>After discussing the concept of a min heap tree, let&#8217;s examine the methods of representing it.<\/p>\n<hr \/>\n<h2>A <a href=\"https:\/\/en.wikipedia.org\/wiki\/Binary_heap\">Min Heap Tree<\/a>&#8216;s depiction.<\/h2>\n<p>The commonly used format to index a Min Heap Binary Tree is an array representation.<\/p>\n<div>\n<div class=\"post-table\">\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Current Node<\/td>\n<td><code>arr[i]<\/code><\/td>\n<\/tr>\n<tr>\n<td>Parent Node<\/td>\n<td><code>arr[(i-1)\/2]<\/code><\/td>\n<\/tr>\n<tr>\n<td>Left Child<\/td>\n<td><code>arr[(2*i) + 1]<\/code><\/td>\n<\/tr>\n<tr>\n<td>Right Child<\/td>\n<td><code>arr[(2*i )+ 2]<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The base of the entire tree can be found at arr[0].<\/p>\n<p>The pattern in the table above can easily be identified by referring to the indexing displayed in the figure below.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/12-0.png\" alt=\"Min Heap Binary Tree Index\" \/><\/div>\n<p>A Binary Heap array is essentially a Binary Tree that is indexed using a Level Order Traversal.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/14-0.png\" alt=\"Min Heap Array\" \/><\/div>\n<p>The Min Heap Tree is represented in the figure above with an array.<\/p>\n<p>Now that we&#8217;ve discussed the ideas, let&#8217;s proceed with putting this into practice using C!<\/p>\n<hr \/>\n<h2>Executing a Min Heap Tree<\/h2>\n<p>To construct the Min Heap, we will utilize the array representation. Initially, let us begin creating the Min Heap structure.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">MinHeap<\/span> MinHeap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">MinHeap<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">int<\/span><span class=\"token operator\">*<\/span> arr<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ Current Size of the Heap<\/span>\r\n    <span class=\"token keyword\">int<\/span> size<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ Maximum capacity of the heap<\/span>\r\n    <span class=\"token keyword\">int<\/span> capacity<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n<\/code><\/pre>\n<p>As elements are inserted or deleted, the array of elements will have its size updated.<\/p>\n<p>The array has a maximum size known as its capacity.<\/p>\n<p>We have to write certain functions to indicate that we are representing a Min Heap Tree, such as locating the parent and the children.<\/p>\n<pre class=\"post-pre\"><code><span class=\"token keyword\">int<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Get the index of the parent<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">left_child<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span>i <span class=\"token operator\">+<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">right_child<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span>i <span class=\"token operator\">+<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">get_min<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Return the root node element,<\/span>\r\n    <span class=\"token comment\">\/\/ since that's the minimum, by the min-heap<\/span>\r\n    <span class=\"token comment\">\/\/ property<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>We will create functions that are responsible for initializing and deallocating the heap.<\/p>\n<pre class=\"post-pre\"><code>MinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">init_minheap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> capacity<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    MinHeap<span class=\"token operator\">*<\/span> minheap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">calloc<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>arr <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">calloc<\/span> <span class=\"token punctuation\">(<\/span>capacity<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>capacity <span class=\"token operator\">=<\/span> capacity<span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> minheap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">free_minheap<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>heap<span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Now that we have that covered, let&#8217;s proceed to learn how we can add elements.<\/p>\n<h2>Adding elements to the Min Heap.<\/h2>\n<p>The algorithm for inserting an element into the tree is straightforward.<\/p>\n<p>Analyzing the algorithm step by step.<\/p>\n<ul class=\"post-ul\">\n<li>First, always insert at the bottom of the tree. The initial position of the inserted element is at the last level.<\/li>\n<li>We will now need to update the position of this element so that the min-heap property is satisfied.<\/li>\n<li>Since the root node of every sub-tree must be the minimum, check the sub-tree of its immediate parent.<\/li>\n<li>If the parent is greater than this inserted element, we need to update its position by swapping it.<\/li>\n<li>But we are not yet done, since the min-heap property may be violated of the updated node\u2019s sub-tree!<\/li>\n<li>We need to keep swapping until we reach the root node, after which we are done.<\/li>\n<\/ul>\n<p>To grasp this method, let&#8217;s consider an instance.<\/p>\n<p>Please contemplate the tree illustrated beneath, consisting solely of a singular component.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/34-0.png\" alt=\"Min Heap One Element\" \/><\/div>\n<p>We can add the number 40. As there is only one element, it will be inserted at the bottom. We can see that the min-heap condition is met since 10 is smaller than 40. Hence, no swapping is required.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/36-0.png\" alt=\"Min Heap Two Elements\" \/><\/div>\n<p>Afterward, we will input 50. A comparable method ensues.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/38-0.png\" alt=\"Min Heap Three Elements\" \/><\/div>\n<p>Afterwards, we will add the number 5. Hence, our initial insertion will be at index 3, positioned at the bottom of the tree.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/40-0.png\" alt=\"Min Heap State 1\" \/><\/div>\n<p>Once the sub-tree 1-3 fails to satisfy the min heap property, the whole tree is affected. Consequently, we are required to continuously exchange the element with its parent until the root is reached.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/42-0.png\" alt=\"Swap 1\" \/><\/div>\n<p>In order to maintain the min-heap property for the sub-tree rooted at node 0, we require another swap.<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/44-0.png\" alt=\"Min Heap After Swapping\" \/><\/div>\n<p>Okay. Now that we have seen it, let\u2019s put it into writing!<\/p>\n<pre class=\"post-pre\"><code>MinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">insert_minheap<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> element<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Inserts an element to the min heap<\/span>\r\n    <span class=\"token comment\">\/\/ We first add it to the bottom (last level)<\/span>\r\n    <span class=\"token comment\">\/\/ of the tree, and keep swapping with it's parent<\/span>\r\n    <span class=\"token comment\">\/\/ if it is lesser than it. We keep doing that until<\/span>\r\n    <span class=\"token comment\">\/\/ we reach the root node. So, we will have inserted the<\/span>\r\n    <span class=\"token comment\">\/\/ element in it's proper position to preserve the min heap property<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">==<\/span> heap<span class=\"token operator\">-&gt;<\/span>capacity<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Cannot insert %d. Heap is already full!\\n\"<\/span><span class=\"token punctuation\">,<\/span> element<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token comment\">\/\/ We can add it. Increase the size and add it to the end<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> element<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Keep swapping until we reach the root<\/span>\r\n    <span class=\"token keyword\">int<\/span> curr <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ As long as you aren't in the root node, and while the <\/span>\r\n    <span class=\"token comment\">\/\/ parent of the last element is greater than it<\/span>\r\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>curr <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token comment\">\/\/ Swap<\/span>\r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token comment\">\/\/ Update the current index of element<\/span>\r\n        curr <span class=\"token operator\">=<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span> \r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Next, we will proceed with the implementation of the deletion procedure.<\/p>\n<h2>Remove from the Minimum Heap<\/h2>\n<p>Firstly, let&#8217;s focus on deleting the root element as the root is closely linked to the min-heap structure, before discussing the deletion of an element at any given index.<\/p>\n<p>In order to remove the smallest element (the root), we will proceed as follows:<\/p>\n<ul class=\"post-ul\">\n<li>Update the root as the last element of the array (tree)<\/li>\n<li>We will now remove the last element at the bottom. This is similar to swapping and deleting at the end! Only because we don\u2019t care about the root value anymore, we simply update it instead.<\/li>\n<li>The problem again is that we need to maintain the min-heap property.<\/li>\n<li>So we must ensure that the whole tree maintains this property. We will use a function called heapify() to do this for us.<\/li>\n<\/ul>\n<p>After performing the heapify() method, the deletion process will be fully executed.<\/p>\n<pre class=\"post-pre\"><code>MinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">delete_minimum<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Deletes the minimum element, at the root<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>heap <span class=\"token operator\">||<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">==<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">int<\/span> size <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">int<\/span> last_element <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>size<span class=\"token operator\">-<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token comment\">\/\/ Update root value with the last element<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> last_element<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Now remove the last element, by decreasing the size<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token operator\">--<\/span><span class=\"token punctuation\">;<\/span>\r\n    size<span class=\"token operator\">--<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ We need to call heapify(), to maintain the min-heap<\/span>\r\n    <span class=\"token comment\">\/\/ property<\/span>\r\n    heap <span class=\"token operator\">=<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<h3>The process of heapify()<\/h3>\n<p>This function receives an index called &#8220;index&#8221; and ensures the min heap property remains intact by swapping it with the smallest element within its immediate subtree.<\/p>\n<p>The tree that is produced will adhere to the min-heap condition.<\/p>\n<p>This includes locating the sub-tree&#8217;s smallest element and exchanging it with the current element.<\/p>\n<p>Once this is done, we must ensure that the entire tree meets this requirement as well. Therefore, we must repeatedly invoke the procedure on the smallest element until we reach the root.<\/p>\n<pre class=\"post-pre\"><code>MinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> index<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Rearranges the heap as to maintain<\/span>\r\n    <span class=\"token comment\">\/\/ the min-heap property<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&lt;=<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token keyword\">int<\/span> left <span class=\"token operator\">=<\/span> <span class=\"token function\">left_child<\/span><span class=\"token punctuation\">(<\/span>index<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n    <span class=\"token keyword\">int<\/span> right <span class=\"token operator\">=<\/span> <span class=\"token function\">right_child<\/span><span class=\"token punctuation\">(<\/span>index<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n\r\n    <span class=\"token comment\">\/\/ Variable to get the smallest element of the subtree<\/span>\r\n    <span class=\"token comment\">\/\/ of an element an index<\/span>\r\n    <span class=\"token keyword\">int<\/span> smallest <span class=\"token operator\">=<\/span> index<span class=\"token punctuation\">;<\/span> \r\n    \r\n    <span class=\"token comment\">\/\/ If the left child is smaller than this element, it is<\/span>\r\n    <span class=\"token comment\">\/\/ the smallest<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>left <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>left<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> \r\n        smallest <span class=\"token operator\">=<\/span> left<span class=\"token punctuation\">;<\/span> \r\n    \r\n    <span class=\"token comment\">\/\/ Similarly for the right, but we are updating the smallest element<\/span>\r\n    <span class=\"token comment\">\/\/ so that it will definitely give the least element of the subtree<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>right <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>right<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> \r\n        smallest <span class=\"token operator\">=<\/span> right<span class=\"token punctuation\">;<\/span> \r\n\r\n    <span class=\"token comment\">\/\/ Now if the current element is not the smallest,<\/span>\r\n    <span class=\"token comment\">\/\/ swap with the current element. The min heap property<\/span>\r\n    <span class=\"token comment\">\/\/ is now satisfied for this subtree. We now need to<\/span>\r\n    <span class=\"token comment\">\/\/ recursively keep doing this until we reach the root node,<\/span>\r\n    <span class=\"token comment\">\/\/ the point at which there will be no change!<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>smallest <span class=\"token operator\">!=<\/span> index<span class=\"token punctuation\">)<\/span> \r\n    <span class=\"token punctuation\">{<\/span> \r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        heap <span class=\"token operator\">=<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> smallest<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>We are capable of enhancing the delete_minimum() function to remove any element.<\/p>\n<h2>Removing any random element<\/h2>\n<p>To achieve this, simply assign the desired element the minimum feasible value, which is obtained by subtracting 1 from get_min(). The reason being that the value must be lower than the current minimum.<\/p>\n<p>Now, we will continue exchanging elements until we update the position in order for the new root to be this particular element.<\/p>\n<p>We have returned to our original delete_minimum() function, where we can effortlessly remove the new root.<\/p>\n<p>This will be the complete procedure for deleting.<\/p>\n<pre class=\"post-pre\"><code>MinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">delete_element<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> index<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Deletes an element, indexed by index<\/span>\r\n    <span class=\"token comment\">\/\/ Ensure that it's lesser than the current root<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token function\">get_min<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token comment\">\/\/ Now keep swapping, until we update the tree<\/span>\r\n    <span class=\"token keyword\">int<\/span> curr <span class=\"token operator\">=<\/span> index<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>curr <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        curr <span class=\"token operator\">=<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Now simply delete the minimum element<\/span>\r\n    heap <span class=\"token operator\">=<\/span> <span class=\"token function\">delete_minimum<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Finally, we&#8217;re finished. Now, I&#8217;ll display the complete code thus far, including the print() function, to allow you to visualize the tree.<\/p>\n<hr \/>\n<h2>The entire code<\/h2>\n<pre class=\"post-pre\"><code><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdio.h&gt;<\/span><\/span>\r\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span><\/span>\r\n\r\n<span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">MinHeap<\/span> MinHeap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">MinHeap<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">int<\/span><span class=\"token operator\">*<\/span> arr<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ Current Size of the Heap<\/span>\r\n    <span class=\"token keyword\">int<\/span> size<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ Maximum capacity of the heap<\/span>\r\n    <span class=\"token keyword\">int<\/span> capacity<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Get the index of the parent<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">\/<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">left_child<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span>i <span class=\"token operator\">+<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">right_child<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">2<\/span><span class=\"token operator\">*<\/span>i <span class=\"token operator\">+<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">get_min<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Return the root node element,<\/span>\r\n    <span class=\"token comment\">\/\/ since that's the minimum<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nMinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">init_minheap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> capacity<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    MinHeap<span class=\"token operator\">*<\/span> minheap <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">calloc<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>arr <span class=\"token operator\">=<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">calloc<\/span> <span class=\"token punctuation\">(<\/span>capacity<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>capacity <span class=\"token operator\">=<\/span> capacity<span class=\"token punctuation\">;<\/span>\r\n    minheap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">=<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> minheap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nMinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">insert_minheap<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> element<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Inserts an element to the min heap<\/span>\r\n    <span class=\"token comment\">\/\/ We first add it to the bottom (last level)<\/span>\r\n    <span class=\"token comment\">\/\/ of the tree, and keep swapping with it's parent<\/span>\r\n    <span class=\"token comment\">\/\/ if it is lesser than it. We keep doing that until<\/span>\r\n    <span class=\"token comment\">\/\/ we reach the root node. So, we will have inserted the<\/span>\r\n    <span class=\"token comment\">\/\/ element in it's proper position to preserve the min heap property<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">==<\/span> heap<span class=\"token operator\">-&gt;<\/span>capacity<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token function\">fprintf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token constant\">stderr<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">\"Cannot insert %d. Heap is already full!\\n\"<\/span><span class=\"token punctuation\">,<\/span> element<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token comment\">\/\/ We can add it. Increase the size and add it to the end<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token operator\">++<\/span><span class=\"token punctuation\">;<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> element<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Keep swapping until we reach the root<\/span>\r\n    <span class=\"token keyword\">int<\/span> curr <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token comment\">\/\/ As long as you aren't in the root node, and while the <\/span>\r\n    <span class=\"token comment\">\/\/ parent of the last element is greater than it<\/span>\r\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>curr <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token comment\">\/\/ Swap<\/span>\r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        <span class=\"token comment\">\/\/ Update the current index of element<\/span>\r\n        curr <span class=\"token operator\">=<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span> \r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nMinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> index<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Rearranges the heap as to maintain<\/span>\r\n    <span class=\"token comment\">\/\/ the min-heap property<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&lt;=<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token keyword\">int<\/span> left <span class=\"token operator\">=<\/span> <span class=\"token function\">left_child<\/span><span class=\"token punctuation\">(<\/span>index<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n    <span class=\"token keyword\">int<\/span> right <span class=\"token operator\">=<\/span> <span class=\"token function\">right_child<\/span><span class=\"token punctuation\">(<\/span>index<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n\r\n    <span class=\"token comment\">\/\/ Variable to get the smallest element of the subtree<\/span>\r\n    <span class=\"token comment\">\/\/ of an element an index<\/span>\r\n    <span class=\"token keyword\">int<\/span> smallest <span class=\"token operator\">=<\/span> index<span class=\"token punctuation\">;<\/span> \r\n    \r\n    <span class=\"token comment\">\/\/ If the left child is smaller than this element, it is<\/span>\r\n    <span class=\"token comment\">\/\/ the smallest<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>left <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>left<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> \r\n        smallest <span class=\"token operator\">=<\/span> left<span class=\"token punctuation\">;<\/span> \r\n    \r\n    <span class=\"token comment\">\/\/ Similarly for the right, but we are updating the smallest element<\/span>\r\n    <span class=\"token comment\">\/\/ so that it will definitely give the least element of the subtree<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>right <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>right<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&lt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> \r\n        smallest <span class=\"token operator\">=<\/span> right<span class=\"token punctuation\">;<\/span> \r\n\r\n    <span class=\"token comment\">\/\/ Now if the current element is not the smallest,<\/span>\r\n    <span class=\"token comment\">\/\/ swap with the current element. The min heap property<\/span>\r\n    <span class=\"token comment\">\/\/ is now satisfied for this subtree. We now need to<\/span>\r\n    <span class=\"token comment\">\/\/ recursively keep doing this until we reach the root node,<\/span>\r\n    <span class=\"token comment\">\/\/ the point at which there will be no change!<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>smallest <span class=\"token operator\">!=<\/span> index<span class=\"token punctuation\">)<\/span> \r\n    <span class=\"token punctuation\">{<\/span> \r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>smallest<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        heap <span class=\"token operator\">=<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> smallest<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> \r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nMinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">delete_minimum<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Deletes the minimum element, at the root<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>heap <span class=\"token operator\">||<\/span> heap<span class=\"token operator\">-&gt;<\/span>size <span class=\"token operator\">==<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token keyword\">int<\/span> size <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">int<\/span> last_element <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>size<span class=\"token operator\">-<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token comment\">\/\/ Update root value with the last element<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> last_element<span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Now remove the last element, by decreasing the size<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token operator\">--<\/span><span class=\"token punctuation\">;<\/span>\r\n    size<span class=\"token operator\">--<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ We need to call heapify(), to maintain the min-heap<\/span>\r\n    <span class=\"token comment\">\/\/ property<\/span>\r\n    heap <span class=\"token operator\">=<\/span> <span class=\"token function\">heapify<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\nMinHeap<span class=\"token operator\">*<\/span> <span class=\"token function\">delete_element<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> index<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Deletes an element, indexed by index<\/span>\r\n    <span class=\"token comment\">\/\/ Ensure that it's lesser than the current root<\/span>\r\n    heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>index<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> <span class=\"token function\">get_min<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">-<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token comment\">\/\/ Now keep swapping, until we update the tree<\/span>\r\n    <span class=\"token keyword\">int<\/span> curr <span class=\"token operator\">=<\/span> index<span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>curr <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token keyword\">int<\/span> temp <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span><span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span>\r\n        heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>curr<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">=<\/span> temp<span class=\"token punctuation\">;<\/span>\r\n        curr <span class=\"token operator\">=<\/span> <span class=\"token function\">parent<\/span><span class=\"token punctuation\">(<\/span>curr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n\r\n    <span class=\"token comment\">\/\/ Now simply delete the minimum element<\/span>\r\n    heap <span class=\"token operator\">=<\/span> <span class=\"token function\">delete_minimum<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> heap<span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">print_heap<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Simply print the array. This is an<\/span>\r\n    <span class=\"token comment\">\/\/ inorder traversal of the tree<\/span>\r\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"Min Heap:\\n\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">=<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&lt;<\/span>heap<span class=\"token operator\">-&gt;<\/span>size<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">++<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n        <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"%d -&gt; \"<\/span><span class=\"token punctuation\">,<\/span> heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token punctuation\">}<\/span>\r\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">\"\\n\"<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">void<\/span> <span class=\"token function\">free_minheap<\/span><span class=\"token punctuation\">(<\/span>MinHeap<span class=\"token operator\">*<\/span> heap<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>heap<span class=\"token punctuation\">)<\/span>\r\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token operator\">-&gt;<\/span>arr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n\r\n<span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span>\r\n    <span class=\"token comment\">\/\/ Capacity of 10 elements<\/span>\r\n    MinHeap<span class=\"token operator\">*<\/span> heap <span class=\"token operator\">=<\/span> <span class=\"token function\">init_minheap<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token function\">insert_minheap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">40<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">insert_minheap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">50<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">insert_minheap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">5<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">print_heap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    \r\n    <span class=\"token comment\">\/\/ Delete the heap-&gt;arr[1] (50)<\/span>\r\n    <span class=\"token function\">delete_element<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n\r\n    <span class=\"token function\">print_heap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token function\">free_minheap<\/span><span class=\"token punctuation\">(<\/span>heap<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>\r\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>\r\n<span class=\"token punctuation\">}<\/span>\r\n<\/code><\/pre>\n<p>Result<\/p>\n<pre class=\"post-pre\"><code>Min Heap<span class=\"token operator\">:<\/span>\r\n<span class=\"token number\">5<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token number\">50<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token number\">40<\/span> <span class=\"token operator\">-&gt;<\/span> \r\nMin Heap<span class=\"token operator\">:<\/span>\r\n<span class=\"token number\">5<\/span> <span class=\"token operator\">-&gt;<\/span> <span class=\"token number\">40<\/span> <span class=\"token operator\">-&gt;<\/span> \r\n<\/code><\/pre>\n<hr \/>\n<h2>The time complexity of the implementation.<\/h2>\n<p>Below, we have stated the time complexities of the procedures mentioned above.<\/p>\n<div>\n<div class=\"post-table\">\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th><\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Function<\/strong><\/td>\n<td><strong>Time Complexity<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>get_min()<\/code><\/td>\n<td><strong>O(1)<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>insert_minheap()<\/code><\/td>\n<td><strong>O(logN)<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>delete_minimum()<\/code><\/td>\n<td>Same as insert &#8211; <strong>O(logN)<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>heapify()<\/code><\/td>\n<td><strong>O(logN)<\/strong><\/td>\n<\/tr>\n<tr>\n<td><code>delete_element()<\/code><\/td>\n<td><strong>O(logN)<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr \/>\n<h2>Get the Code<\/h2>\n<p>I have uploaded the complete code as a Github Gist, which you can download. If you have any questions, feel free to ask them in the comment section below!<\/p>\n<hr \/>\n<h2>In conclusion, summarizing the above information.<\/h2>\n<p>In this article, we discovered the ways to depict a Binary Tree of Min Heap and examined its execution in the C language.<\/p>\n<h2>One possible paraphrase of &#8220;References&#8221; would be &#8220;Citations&#8221; or &#8220;Sources&#8221;.<\/h2>\n<ul class=\"post-ul\">\n<li>An illustration of Heaps, from Cormen<\/li>\n<li>Wikipedia article on Binary Heaps<\/li>\n<\/ul>\n<hr \/>\n<p>&nbsp;<\/p>\n<p>More tutorials<\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/jquery-tree-traversal-functions\/\" target=\"_blank\" rel=\"noopener\">jQuery parent() and children() tree traversal functions<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-delete-elements-from-an-array-in-java\/\" target=\"_blank\" rel=\"noopener\">How to Delete Elements from an Array in Java<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-include-items-to-a-list-in-python\/\" target=\"_blank\" rel=\"noopener\">How to include items to a list in Python<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/convert-string-to-character-in-java\/\" target=\"_blank\" rel=\"noopener\">convert string to character array in Java.<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p><a class=\"LinkSuggestion__Link-sc-1gewdgc-4 cLBplk\" href=\"https:\/\/www.silicloud.com\/blog\/creating-a-graphql-api-using-prisma-on-silicon-clouds-app-platform\/\" target=\"_blank\" rel=\"noopener\">Creating a GraphQL API using Prisma on Silicon Cloud&#8217;s App Platform<span class=\"sc-gswNZR eASTkv\">(Opens in a new browser tab)<\/span><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A Min Heap Binary Tree refers to a type of Binary Tree where the root node has the smallest key value among all nodes in the tree. The Min Heap property is applicable to all sub-trees in the tree, as stated in the definition above. With the exception of the last 2 layers, almost all [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[227,223,230,224,225,226,228,229],"class_list":["post-1003","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-binary-tree-algorithms","tag-binary-tree-minimum-heap-structure","tag-computer-science","tag-data-structures","tag-heap-data-structure","tag-min-heap","tag-priority-queue","tag-tree-traversal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A Binary Tree with a minimum heap structure. - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Binary Tree with a minimum heap structure.\" \/>\n<meta property=\"og:description\" content=\"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-09T23:23:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-18T16:48:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/4-0.png\" \/>\n<meta name=\"author\" content=\"Olivia Parker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Olivia Parker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\"},\"author\":{\"name\":\"Olivia Parker\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\"},\"headline\":\"A Binary Tree with a minimum heap structure.\",\"datePublished\":\"2022-11-09T23:23:48+00:00\",\"dateModified\":\"2025-07-18T16:48:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\"},\"wordCount\":1170,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"keywords\":[\"binary tree algorithms\",\"Binary Tree minimum heap structure\",\"computer science\",\"data structures\",\"heap data structure\",\"min heap\",\"priority queue\",\"tree traversal\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\",\"name\":\"A Binary Tree with a minimum heap structure. - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2022-11-09T23:23:48+00:00\",\"dateModified\":\"2025-07-18T16:48:57+00:00\",\"description\":\"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Binary Tree with a minimum heap structure.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9\",\"name\":\"Olivia Parker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g\",\"caption\":\"Olivia Parker\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A Binary Tree with a minimum heap structure. - Blog - Silicon Cloud","description":"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.","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:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/","og_locale":"en_US","og_type":"article","og_title":"A Binary Tree with a minimum heap structure.","og_description":"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.","og_url":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2022-11-09T23:23:48+00:00","article_modified_time":"2025-07-18T16:48:57+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/655dbfc8cdcf9b67579fe914\/4-0.png"}],"author":"Olivia Parker","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Olivia Parker","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/"},"author":{"name":"Olivia Parker","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9"},"headline":"A Binary Tree with a minimum heap structure.","datePublished":"2022-11-09T23:23:48+00:00","dateModified":"2025-07-18T16:48:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/"},"wordCount":1170,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"keywords":["binary tree algorithms","Binary Tree minimum heap structure","computer science","data structures","heap data structure","min heap","priority queue","tree traversal"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/","url":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/","name":"A Binary Tree with a minimum heap structure. - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2022-11-09T23:23:48+00:00","dateModified":"2025-07-18T16:48:57+00:00","description":"Learn about Binary Tree with minimum heap structure. Understand heap properties, implementation, and operations in data structures and algorithms.","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/a-binary-tree-with-a-minimum-heap-structure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A Binary Tree with a minimum heap structure."}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/3ff7b3da0e45ac5dbbef2502f3cea8d9","name":"Olivia Parker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/56c66f189ba32a6f9eb50f31a38fe774e2a725c213d4070835ccc51b8fbbc54b?s=96&d=mm&r=g","caption":"Olivia Parker"},"url":"https:\/\/www.silicloud.com\/blog\/author\/oliviaparker\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=1003"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1003\/revisions"}],"predecessor-version":[{"id":147549,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/1003\/revisions\/147549"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=1003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=1003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=1003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}