Finding the second largest element in BST using C++

In a binary search tree (BST), the second largest element must be returned. In a binary tree, the second element is the largest element.


According to the given BST, 13 is the second largest element. Now we are using the C++ approach to solve this problem. We can traverse the tree inorder, and by observation, we can observe that the second largest element in the given BST is 13. The inorder of the tree will be 1 3 4 6 7 8 10 13 14, and we can observe that the elements are in the sorted array. So we return the second largest element.

Let?s assume some simple input and output scenarios

Assume the elements in a binary tree as shown in below. Here there are only two present in the binary search tree. By comparing the values of the nodes the second highest value wil be 6.

Input = BST
     11
     /
    6
Output = Second largest element in BST will be: 6

Also consider this scenario below, as there is a binary search tree below and having good amount of nodes. The output of the below binary tree will be

<span class="typ">Input</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> BST
       </span><span class="lit">11</span><span class="pln">
      </span><span class="pun">/</span><span class="pln">  \
     </span><span class="lit">6</span><span class="pln">   </span><span class="lit">21</span><span class="pln">
    </span><span class="pun">/</span><span class="pln">     \
   </span><span class="lit">4</span><span class="pln">       </span><span class="lit">31</span><span class="pln">
</span><span class="typ">Output</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Second</span><span class="pln"> largest element </span><span class="kwd">in</span><span class="pln"> BST will be</span><span class="pun">:</span><span class="pln"> </span><span class="lit">21</span>

Algorithm

The steps below is the following way to approach.

  • Implement a Binary search tree (BST).

  • Insert the values of the node into BST.

  • Using inorder traversing technique, Left -> Root -> Right (L-R-R)

  • Then find out the second largest node value in BST by using [inorder.size()-2];

Example

Following is the C++ code to find the second largest element in a binary search tree ?

<div class="execute"></div><div class="code-mirror  language-cpp" contenteditable="plaintext-only" spellcheck="false" style="outline: none; overflow-wrap: break-word; overflow-y: auto; white-space: pre-wrap;"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><iostream></span></span>
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><vector></span></span>
<span class="token keyword">using</span> <span class="token keyword">namespace</span> std<span class="token punctuation">;</span>
<span class="token keyword">class</span> <span class="token class-name">Node</span> <span class="token punctuation">{</span>
   <span class="token keyword">public</span><span class="token operator">:</span>
   <span class="token keyword">int</span> val<span class="token punctuation">;</span>
   Node <span class="token operator">*</span>left<span class="token punctuation">,</span> <span class="token operator">*</span>right<span class="token punctuation">;</span>
   <span class="token function">Node</span><span class="token punctuation">(</span><span class="token keyword">int</span> val<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">this</span><span class="token operator">-></span>val <span class="token operator">=</span> val<span class="token punctuation">;</span>
      left <span class="token operator">=</span> right <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">void</span> <span class="token function">solve</span><span class="token punctuation">(</span>Node<span class="token operator">*</span> root<span class="token punctuation">,</span> vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span><span class="token operator">&</span> inorder<span class="token punctuation">)</span> <span class="token punctuation">{</span>
   <span class="token keyword">if</span><span class="token punctuation">(</span>root <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token keyword">return</span><span class="token punctuation">;</span>
      <span class="token function">solve</span><span class="token punctuation">(</span>root<span class="token operator">-></span>left<span class="token punctuation">,</span> inorder<span class="token punctuation">)</span><span class="token punctuation">;</span>
   inorder<span class="token punctuation">.</span><span class="token function">push_back</span><span class="token punctuation">(</span>root<span class="token operator">-></span>val<span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token function">solve</span><span class="token punctuation">(</span>root<span class="token operator">-></span>right<span class="token punctuation">,</span> inorder<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<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>
   Node<span class="token operator">*</span> root <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">8</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>left <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>right <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>left<span class="token operator">-></span>left <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>left<span class="token operator">-></span>right <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">6</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>left<span class="token operator">-></span>right<span class="token operator">-></span>left <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>left<span class="token operator">-></span>right<span class="token operator">-></span>right <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>right<span class="token operator">-></span>right <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">14</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<span class="token operator">-></span>right<span class="token operator">-></span>right<span class="token operator">-></span>left <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   vector<span class="token operator"><</span><span class="token keyword">int</span><span class="token operator">></span> inorder<span class="token punctuation">;</span>
   <span class="token function">solve</span><span class="token punctuation">(</span>root<span class="token punctuation">,</span> inorder<span class="token punctuation">)</span><span class="token punctuation">;</span>
   cout <span class="token operator"><<</span> <span class="token string">"Second largest element of this BST is : "</span> <span class="token operator"><<</span> inorder<span class="token punctuation">[</span>inorder<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
   <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</div><div class="output-wrapper"><div class="console-close"></div><div class="code-output"></div></div>

Output

Second largest element of this BST is: 13

Conclusion

This is a purely observational-based question in which we need to observe the pattern with the inorder of the tree. The time complexity of this algorithm is O(n) for the inorder.

Updated on: 2022-08-10T12:03:40+05:30

842 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements