×

String Coding Problems

Arrays Coding Problems

Sorting Coding Problems

Searching Coding Problems

Coding Algorithms

Tree Coding Problems

Stack Coding Problems

Linked list Coding Problems

Graph Coding Problems

Greedy Algorithms Coding Problems

Dynamic Programming Coding Problems

Matrix Coding Problems

Recursion Coding Problems

Number Theory Coding Problems

Backtracking Coding Problems

Heap Coding Problems

Brute Force Coding Problems

Implementation Coding Problems

Google Contests

Competitive Programming Coding

Miscellaneous

Print Boundary Sum of a Binary Tree

In-this article, we are going to learn how to find boundary sum of a binary tree? This article contains the solution along with algorithm and program. Submitted by Radib Kar, on December 02, 2018

Problem statement: Given a binary tree, print the boundary sum of the tree.

Solution

First of all we need to understand what the boundary sum of a binary tree is? It's simply the cumulative sum of all boundary nodes surrounding the tree. For the following example:

print boundry sum of a binary tree

The boundary nodes are: 2, 7, 2, 5, 11, 4, 9, and 5 (from left to right direction)

So there are four types of node considered to be boundary node:

  1. Root node
  2. All the leaf nodes
  3. All the nodes at the leftmost side (there will be a duplicate since the last leftmost node is itself a leaf node, discard the duplicate)
  4. All the nodes at the rightmost side ( there will be a duplicate since the last rightmost node is itself a leaf node, discard the duplicate)

Thus, the boundary sum is: 45


Algorithm

  1. Set sum=0
  2. Add root->data to sum; (type-1 boundary node)
  3. Find all the leaf nodes & add their values respectively. (type-2 boundary node)
    For this portion we do a level-order traversal & keep checking whether the traversed node has both its left & right point NULL or not.
    If the traversed node has both its pointer NULL then it’s a leaf node & of course add to sum cumulatively.
  4. Find the leftmost nodes (without leaf node) & add their respective values. (type-3 boundary node)
    Set temp to root->left
  5. while(!(temp->right==NULL&&temp->left==NULL)){//avoiding leaf node
        sum+=temp->data; //add temp->data
        //always tend to move left side 
        //first for left most nodes
        if(temp->left) 
            temp=temp->left;
        else
            temp=temp->right;
    }
    
  6. Find the rightmost nodes (without leaf node) & add their respective values. (type-4 boundary node)
    Set temp to root->right
  7. while(!(temp->right==NULL&& temp->left==NULL)){//avoiding leaf node
        sum+=temp->data;//add temp->data
        //always tend to move right side 
        //first for right most nodes
        if(temp->right) 
            temp=temp->right;
        else
            temp=temp->left;
    }
    

C++ program to print Boundary Sum of a Binary Tree

#include <bits/stdc++.h>
using namespace std;

// tree node is defined
class tree{
	public:
		int data;
		tree *left;
		tree *right;
};


int findBoundarySum(tree* root){ //finding boundary sum
if(root==NULL) //base case
	return 0;
int sum=0; //(step1)
sum+=root->data; //add root value (step2)

//find the leaf nodes & add(step3)
tree* temp=root, *store; //copy root to temp
queue<tree*> q; //creat a queue to store tree* variables (pointer to nodes)

//doing level order traversal
q.push(temp);
while(!q.empty()){
	store=q.front();
	q.pop();
	// if left & right both pointers are NULL, it's a leaf node
	if(store->left==NULL && store->right==NULL) 
		sum+=store->data; // add leaf node value
	if(store->left)
		q.push(store->left);
	if(store->right)
		q.push(store->right);
}

/////end of step3////////


//adding the leftmost nodes excluding leaf node(step4)///////////
temp=root->left;
while(!(temp->right==NULL && temp->left==NULL)){//avoiding leaf node
	sum+=temp->data;
	if(temp->left)
		temp=temp->left;
	else
		temp=temp->right;
}

////end of step4//////////

//adding the rightmost nodes excluding leaf node(steps)///////////
temp=root->right;
while(!(temp->right==NULL && temp->left==NULL)){//avoiding leaf node
	sum+=temp->data;
	if(temp->right)
		temp=temp->right;
	else
		temp=temp->left;
}
////end of step5//////////
//boundary sum is now calculated, return it
return sum;
}

// creating new node
tree* newnode(int data)  
{ 
	tree* node = (tree*)malloc(sizeof(tree)); 
	node->data = data; 
	node->left = NULL; 
	node->right = NULL; 
	return(node); 
} 

int main() 
{ 
	//**same tree is builted as shown in example**
	cout<<"Tree is built like the example aforesaid"<<endl;
	//building the tree like as in the example
	tree *root=newnode(2); 
	root->left= newnode(7); 
	root->right= newnode(5); 
	root->right->right=newnode(9);
	root->right->right->left=newnode(4);
	root->left->left=newnode(2); 
	root->left->right=newnode(6);
	root->left->right->left=newnode(5);
	root->left->right->right=newnode(11);

	cout<<"finding boundary sum......"<<endl; 
	cout<<"boundary sum is "<<findBoundarySum(root)<<endl;

	return 0; 
} 

Output

Tree is built like the example aforesaid
finding boundary sum......
boundary sum is 45


Comments and Discussions!

Load comments ↻





Copyright © 2024 www.includehelp.com. All rights reserved.