# Vertical width of Binary tree | Set 2

Given a binary tree, find the vertical width of the binary tree. Width of a binary tree is the number of vertical paths.

Examples:

```Input :
7
/  \
6    5
/ \  / \
4   3 2  1
Output : 5

Input :
1
/    \
2       3
/ \     / \
4   5   6   7
\   \
8   9
Output : 6```

Prerequisite : Print Binary Tree in Vertical order

In this image, the tree contains 6 vertical lines which is the required width of tree.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach : In this Approach, we use the approach for printing vertical View of binary tree. Store the horizontal distances in a set and return 1 + highest horizontal distance – lowest horizontal distance. 1 is added to consider horizontal distance 0 as well. While going left, do hd – 1 and for right do hd + 1. We insert all possible distances in a hash table and finally return size of the hash table.

## C++

 `// CPP code to find vertical ` `// width of a binary tree ` `#include ` `using` `namespace` `std; ` ` `  `// Tree class ` `class` `Node ` `{ ` `public` `: ` `    ``int` `data; ` `    ``Node *left, *right; ` ` `  `    ``// Constructor ` `    ``Node(``int` `data_new) ` `    ``{ ` `        ``data = data_new; ` `        ``left = right = NULL; ` `    ``} ` `}; ` ` `  `// Function to fill hd in set. ` `void` `fillSet(Node* root, unordered_set<``int``>& s, ` `                                       ``int` `hd) ` `{ ` `    ``if` `(!root) ` `        ``return``; ` ` `  `    ``fillSet(root->left, s, hd - 1); ` `    ``s.insert(hd); ` `    ``fillSet(root->right, s, hd + 1); ` `} ` ` `  `int` `verticalWidth(Node* root) ` `{ ` `    ``unordered_set<``int``> s; ` ` `  `    ``// Third parameter is horizontal ` `    ``// distance ` `    ``fillSet(root, s, 0); ` ` `  `    ``return` `s.size(); ` `} ` ` `  `int` `main() ` `{ ` `    ``Node* root = NULL; ` ` `  `    ``// Creating the above tree ` `    ``root = ``new` `Node(1); ` `    ``root->left = ``new` `Node(2); ` `    ``root->right = ``new` `Node(3); ` `    ``root->left->left = ``new` `Node(4); ` `    ``root->left->right = ``new` `Node(5); ` `    ``root->right->left = ``new` `Node(6); ` `    ``root->right->right = ``new` `Node(7); ` `    ``root->right->left->right = ``new` `Node(8); ` `    ``root->right->right->right = ``new` `Node(9); ` ` `  `    ``cout << verticalWidth(root) << ``"\n"``; ` ` `  `    ``return` `0; ` `} `

## Java

 `/* Java code to find the vertical width of a binary tree */` `import` `java.io.*; ` `import` `java.util.*; ` ` `  `/* A binary tree node has data, pointer to left child  ` `and a pointer to right child */` `class` `Node  ` `{  ` `    ``int` `data;  ` `    ``Node left, right;  ` `     `  `    ``Node(``int` `item)  ` `    ``{  ` `        ``data = item;  ` `        ``left = right = ``null``;  ` `    ``}  ` `}  ` ` `  `class` `BinaryTree  ` `{  ` `    ``Node root;  ` ` `  `    ``/* UTILITY FUNCTIONS */` `    ``// Function to fill hd in set.  ` `    ``void` `fillSet(Node root,Set set,``int` `hd) ` `    ``{ ` `        ``if``(root == ``null``) ``return``; ` `        ``fillSet(root.left,set,hd - ``1``); ` `        ``set.add(hd); ` `        ``fillSet(root.right,set,hd + ``1``); ` `    ``} ` ` `  ` `  `    ``int` `verticalWidth(Node root) ` `    ``{ ` `        ``Set set = ``new` `HashSet();  ` `         `  `        ``// Third parameter is horizontal distance  ` `        ``fillSet(root,set,``0``); ` `        ``return` `set.size(); ` `    ``} ` `     `  `    ``/* Driver program to test above functions */` `    ``public` `static` `void` `main(String args[])  ` `    ``{  ` `        ``BinaryTree tree = ``new` `BinaryTree();  ` `         `  `        ``/*  ` `        ``Constructed bunary tree is:  ` `            ``1  ` `            ``/ \  ` `        ``2 3  ` `        ``/ \ \  ` `        ``4 5     8  ` `                ``/ \  ` `                ``6 7  ` `        ``*/` `        ``tree.root = ``new` `Node(``1``);  ` `        ``tree.root.left = ``new` `Node(``2``);  ` `        ``tree.root.right = ``new` `Node(``3``);  ` `        ``tree.root.left.left = ``new` `Node(``4``);  ` `        ``tree.root.left.right = ``new` `Node(``5``);  ` `        ``tree.root.right.right = ``new` `Node(``8``);  ` `        ``tree.root.right.right.left = ``new` `Node(``6``);  ` `        ``tree.root.right.right.right = ``new` `Node(``7``);  ` `        ``System.out.println(tree.verticalWidth(tree.root)); ` `         `  `    ``}  ` `}  ` ` `  `/* This code is contributed by Ashok Borra */`

## Python3

 `# Python code to find vertical  ` `# width of a binary tree ` ` `  `class` `Node: ` `    ``def` `__init__(``self``, data): ` `        ``self``.data ``=` `data ` `        ``self``.left ``=` `self``.right ``=` `None` ` `  `# Function to fill hd in set.  ` `def` `fillSet(root, s, hd): ` `    ``if` `(``not` `root): ` `        ``return` ` `  `    ``fillSet(root.left, s, hd ``-` `1``)  ` `    ``s.add(hd) ` `    ``fillSet(root.right, s, hd ``+` `1``) ` ` `  `def` `verticalWidth(root): ` `    ``s ``=` `set``() ` ` `  `    ``# Third parameter is horizontal  ` `    ``# distance  ` `    ``fillSet(root, s, ``0``)  ` ` `  `    ``return` `len``(s) ` ` `  `if` `__name__ ``=``=` `'__main__'``: ` ` `  `    ``# Creating the above tree  ` `    ``root ``=` `Node(``1``)  ` `    ``root.left ``=` `Node(``2``)  ` `    ``root.right ``=` `Node(``3``)  ` `    ``root.left.left ``=` `Node(``4``)  ` `    ``root.left.right ``=` `Node(``5``)  ` `    ``root.right.left ``=` `Node(``6``)  ` `    ``root.right.right ``=` `Node(``7``)  ` `    ``root.right.left.right ``=` `Node(``8``)  ` `    ``root.right.right.right ``=` `Node(``9``)  ` ` `  `    ``print``(verticalWidth(root)) ` ` `  `# This code is contributed by PranchalK `

## C#

 `// C# code to find the vertical width  ` `// of a binary tree ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `/* A binary tree node has data,  ` `pointer to left child and a  ` `pointer to right child */` `public` `class` `Node  ` `{  ` `    ``public` `int` `data;  ` `    ``public` `Node left, right;  ` `     `  `    ``public` `Node(``int` `item)  ` `    ``{  ` `        ``data = item;  ` `        ``left = right = ``null``;  ` `    ``}  ` `}  ` ` `  `public` `class` `BinaryTree  ` `{  ` `    ``Node root;  ` ` `  `    ``/* UTILITY FUNCTIONS */` `    ``// Function to fill hd in set.  ` `    ``void` `fillSet(Node root, HashSet<``int``> ``set``, ``int` `hd) ` `    ``{ ` `        ``if``(root == ``null``) ``return``; ` `        ``fillSet(root.left, ``set``, hd - 1); ` `        ``set``.Add(hd); ` `        ``fillSet(root.right, ``set``, hd + 1); ` `    ``} ` ` `  `    ``int` `verticalWidth(Node root) ` `    ``{ ` `        ``HashSet<``int``> ``set` `= ``new` `HashSet<``int``>();  ` `         `  `        ``// Third parameter is horizontal distance  ` `        ``fillSet(root,``set``, 0); ` `        ``return` `set``.Count; ` `    ``} ` `     `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String []args)  ` `    ``{  ` `        ``BinaryTree tree = ``new` `BinaryTree();  ` `         `  `        ``/*  ` `        ``Constructed bunary tree is:  ` `            ``1  ` `            ``/ \  ` `        ``2 3  ` `        ``/ \ \  ` `        ``4 5     8  ` `                ``/ \  ` `                ``6 7  ` `        ``*/` `        ``tree.root = ``new` `Node(1);  ` `        ``tree.root.left = ``new` `Node(2);  ` `        ``tree.root.right = ``new` `Node(3);  ` `        ``tree.root.left.left = ``new` `Node(4);  ` `        ``tree.root.left.right = ``new` `Node(5);  ` `        ``tree.root.right.right = ``new` `Node(8);  ` `        ``tree.root.right.right.left = ``new` `Node(6);  ` `        ``tree.root.right.right.right = ``new` `Node(7);  ` `        ``Console.WriteLine(tree.verticalWidth(tree.root)); ` `         `  `    ``}  ` `} ` ` `  `// This code is contributed by PrinciRaj1992  `

Output:

```6
```

My Personal Notes arrow_drop_up

A Coding Enthusiast Rails Developer

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.

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.