# Sum of nodes in top view of binary tree

Top view of a binary tree is the set of nodes visible when the tree is viewed from the top. Given a binary tree, the task is to print the sum of nodes in top view.

**Examples:**

Input:1 / \ 2 3 / \ \ 4 5 6Output:16Input:1 / \ 2 3 \ 4 \ 5 \ 6Output:12

**Approach:** The idea is to put nodes of same horizontal distance together. We do a level order traversal so that the topmost node at a horizontal node is visited before any other node of same horizontal distance below it and we keep summing up their values and store the result in variable **sum**. Hashing is used to check if a node at given horizontal distance is seen or not.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Structure of binary tree ` `struct` `Node { ` ` ` `Node* left; ` ` ` `Node* right; ` ` ` `int` `hd; ` ` ` `int` `data; ` `}; ` ` ` `// Function to create a new node ` `Node* newNode(` `int` `key) ` `{ ` ` ` `Node* node = ` `new` `Node(); ` ` ` `node->left = node->right = NULL; ` ` ` `node->data = key; ` ` ` `return` `node; ` `} ` ` ` `// Function that returns the sum of ` `// nodes in top view of binary tree ` `int` `SumOfTopView(Node* root) ` `{ ` ` ` `if` `(root == NULL) ` ` ` `return` `0; ` ` ` ` ` `queue<Node*> q; ` ` ` ` ` `map<` `int` `, ` `int` `> m; ` ` ` `int` `hd = 0; ` ` ` ` ` `root->hd = hd; ` ` ` ` ` `int` `sum = 0; ` ` ` ` ` `// Push node and horizontal distance to queue ` ` ` `q.push(root); ` ` ` ` ` `while` `(q.size()) { ` ` ` `hd = root->hd; ` ` ` ` ` `// Count function returns 1 if the container ` ` ` `// contains an element whose key is equivalent ` ` ` `// to hd, or returns zero otherwise. ` ` ` `if` `(m.count(hd) == 0) { ` ` ` `m[hd] = root->data; ` ` ` `sum += m[hd]; ` ` ` `} ` ` ` `if` `(root->left) { ` ` ` `root->left->hd = hd - 1; ` ` ` `q.push(root->left); ` ` ` `} ` ` ` `if` `(root->right) { ` ` ` `root->right->hd = hd + 1; ` ` ` `q.push(root->right); ` ` ` `} ` ` ` `q.pop(); ` ` ` `root = q.front(); ` ` ` `} ` ` ` ` ` `return` `sum; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `Node* root = newNode(1); ` ` ` `root->left = newNode(2); ` ` ` `root->right = newNode(3); ` ` ` `root->left->right = newNode(4); ` ` ` `root->left->right->right = newNode(5); ` ` ` `root->left->right->right->right = newNode(6); ` ` ` ` ` `cout << SumOfTopView(root); ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 implementation of the approach

from collections import defaultdict

class Node:

def __init__(self, key):

self.data = key

self.hd = None

self.left = None

self.right = None

# Function that returns the sum of

# nodes in top view of binary tree

def SumOfTopView(root):

if root == None:

return 0

q = []

m = defaultdict(lambda:0)

hd, Sum = 0, 0

root.hd = hd

# Push node and horizontal

# distance to queue

q.append(root)

while len(q) > 0:

hd = root.hd

# Count function returns 1 if

# the container contains an

# element whose key is equivalent

# to hd, or returns zero otherwise.

if m[hd] == 0:

m[hd] = root.data

Sum += m[hd]

if root.left != None:

root.left.hd = hd – 1

q.append(root.left)

if root.right != None:

root.right.hd = hd + 1

q.append(root.right)

q.pop(0)

if len(q) > 0:

root = q[0]

return Sum

# Driver code

if __name__ == “__main__”:

root = Node(1)

root.left = Node(2)

root.right = Node(3)

root.left.right = Node(4)

root.left.right.right = Node(5)

root.left.right.right.right = Node(6)

print(SumOfTopView(root))

# This code is contributed by Rituraj Jain

**Output:**

12

## Recommended Posts:

- Print nodes in the Top View of Binary Tree | Set 3
- Print nodes in top view of Binary Tree | Set 2
- Sum of nodes in bottom view of Binary Tree
- Print Nodes in Top View of Binary Tree
- Right view of Binary Tree using Queue
- Print Right View of a Binary Tree
- Bottom View of a Binary Tree
- Print Left View of a Binary Tree
- Iterative Method To Print Left View of a Binary Tree
- Sum of all nodes in a binary tree
- Product of all nodes in a Binary Tree
- XOR of path between any two nodes in a Binary Tree
- Sum of all the Boundary Nodes of a Binary Tree
- Sum of all leaf nodes of binary tree
- Sink Odd nodes in Binary Tree

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.