C++ program to Replace a Node with Depth in a Binary Tree

Suppose we have a binary tree and we want to replace the depth of each node with its value. The depth of the node starts from 0 at the root node and increases by 1 for each level we go; for example, we have a binary tree like this;


Here we replace,

Node Value Depth
1 0
2 1
3 1
4 2
5 2
6 2
7 2
8 3
9 3

We do a simple preorder tree traversal and assign each node the depth.

Let?s look at some input scenarios ?

Suppose we have values of nodes in binary tree as [3 2 7 5 4 6 9 7 2] and the output obtained from this input would be ?

Input: [3 2 7 5 4 6 9 7 2]
Result:
Before: 6 5 9 2 4 3 7 7 2
After: 3 2 3 1 2 0 2 1 2

Suppose we have values of nodes in binary tree as [4 3 5 6 10 7 12 8 1] and the output obtained from this input would be ?

Input: [4 3 5 6 10 7 12 8 1]
Result:
Before: 7 6 12 3 10 4 8 5 1
After: 3 2 3 1 2 0 2 1 2 

Example

Following is a C++ program to replace a node value in a binary tree with its corresponding depth within the 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 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> value<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> value<span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">this</span><span class="token operator">-></span>value <span class="token operator">=</span> value<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>node<span class="token punctuation">,</span> <span class="token keyword">int</span> depth<span class="token punctuation">)</span> <span class="token punctuation">{</span>
   <span class="token keyword">if</span> <span class="token punctuation">(</span>node <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token keyword">return</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
   node<span class="token operator">-></span>value <span class="token operator">=</span> depth<span class="token punctuation">;</span>
   <span class="token function">solve</span><span class="token punctuation">(</span>node<span class="token operator">-></span>left<span class="token punctuation">,</span> depth<span class="token operator">+</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   <span class="token function">solve</span><span class="token punctuation">(</span>node<span class="token operator">-></span>right<span class="token punctuation">,</span> depth<span class="token operator">+</span><span class="token number">1</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">printInorder</span><span class="token punctuation">(</span>Node<span class="token operator">*</span> root<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 punctuation">{</span>
      <span class="token keyword">return</span><span class="token punctuation">;</span>
   <span class="token punctuation">}</span>
   <span class="token function">printInorder</span><span class="token punctuation">(</span>root<span class="token operator">-></span>left<span class="token punctuation">)</span><span class="token punctuation">;</span>
   cout <span class="token operator"><<</span> root<span class="token operator">-></span>value <span class="token operator"><<</span><span class="token string">" "</span><span class="token punctuation">;</span>
   <span class="token function">printInorder</span><span class="token punctuation">(</span>root<span class="token operator">-></span>right<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">1</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">2</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">3</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">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> <span class="token keyword">new</span> <span class="token function">Node</span><span class="token punctuation">(</span><span class="token number">5</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>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">8</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>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">9</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   root<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">6</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">7</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   cout <span class="token operator"><<</span> <span class="token string">"Before: "</span><span class="token punctuation">;</span>
   <span class="token function">printInorder</span><span class="token punctuation">(</span>root<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 punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
   cout <span class="token operator"><<</span> <span class="token string">"\nAfter: "</span><span class="token punctuation">;</span>
   <span class="token function">printInorder</span><span class="token punctuation">(</span>root<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

Before: 8 4 9 2 5 1 6 3 7
After: 3 2 3 1 2 0 2 1 2 

Conclusion

We conclude that using a simple preorder traversal of the tree and replacing the value with depth at each node is sufficient to solve the problem. There is an O(n) time complexity. Here is a article we hope will be helpful to you.

Updated on: 2022-08-10T11:58:31+05:30

432 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements