Given a binary tree, print it vertically. The following example illustrates vertical order traversal.
1 / \ 2 3 / \ / \ 4 5 6 7 \ \ 8 9 The output of print this tree vertically will be: 4 2 1 5 6 3 8 7 9
We have discussed an efficient approach in below post.
The above solution uses preorder traversal and Hashmap to store nodes according to horizontal distances. Since above approach uses preorder traversal, nodes in a vertical line may not be prined in same order as they appear in tree. For example, the above solution prints 12 before 9 in below tree. See this for a sample run.
1 / \ 2 3 / \ / \ 4 5 6 7 \ / \ 8 10 9 \ 11 \ 12
If we use level order traversal, we can make sure that if a node like 12 comes below in same vertical line, it is printed after a node like 9 which comes above in vertical line.
1. To maintain a hash for the branch of each node. 2. Traverse the tree in level order fashion. 3. In level order traversal, maintain a queue which holds, node and its vertical branch. * pop from queue. * add this node's data in vector corresponding to its branch in the hash. * if this node hash left child, insert in the queue, left with branch - 1. * if this node hash right child, insert in the queue, right with branch + 1.
Vertical order traversal is 4 2 1 5 6 3 8 10 7 11 9 12
Time Complexity of above implementation is O(n Log n). Note that above implementation uses map which is implemented using self-balancing BST.
We can reduce time complexity to O(n) using unordered_map. To print nodes in desired order, we can have 2 variables denoting min and max horizontal distance. We can simply iterate from min to max horizontal distance and get corresponding values from Map. So it is O(n)
Auxiliary Space : O(n)
This article is contributed by Sahil Chhabra (akku). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Improved By : shweta44
- Print a Binary Tree in Vertical Order | Set 2 (Map based Method)
- Print a Binary Tree in Vertical Order | Set 1
- Print Nodes in Top View of Binary Tree
- Level order traversal in spiral form
- Level Order Tree Traversal
- HashSet vs TreeSet in Java
- Check if the first and last digit of the smallest number forms a prime
- Preorder from Inorder and Postorder traversals
- Majority element in a circular array of 0’s and 1’s
- Elements that occurred only once in the array