Please refer below post before reading about AVL tree handling of duplicates.
The is to augment AVL tree node to store count together with regular fields like key, left and right pointers.
Insertion of keys 12, 10, 20, 9, 11, 10, 12, 12 in an empty Binary Search Tree would create following.
12(3) / \ 10(2) 20(1) / \ 9(1) 11(1)
Count of a key is shown in bracket
Below is implementation of normal AVL Tree with count with every key. This code basically is taken from code for insert and delete in AVL tree. The changes made for handling duplicates are highlighted, rest of the code is same.
The important thing to note is changes are very similar to simple Binary Search Tree changes.
Pre order traversal of the constructed AVL tree is 9(2) 5(2) 7(1) 10(1) 17(1) Pre order traversal after deletion of 10 9(1) 5(2) 7(1) 10(1) 17(1)
Thanks to Rounaq Jhunjhunu Wala for sharing initial code. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
- Find All Duplicate Subtrees
- BST to a Tree with sum of all smaller keys
- Print BST keys in the given range
- Check if a Binary Tree (not BST) has duplicate values
- Check if a Binary Tree contains duplicate subtrees of size 2 or more
- Find the number of distinct pairs of vertices which have a distance of exactly k in a tree
- Print All Leaf Nodes of a Binary Tree from left to right | Set-2 ( Iterative Approach )
- Make a tree with n vertices , d diameter and at most vertex degree k
- Zig-Zag traversal of a Binary Tree using Recursion
- Remove all multiples of K from Binary Tree
- Print the first shortest root to leaf path in a Binary Tree
- DP on Trees | Set-3 ( Diameter of N-ary Tree )
- Print all internal nodes of a Binary tree
- Reverse zigzag Traversal of a Binary Tree
Improved By : andrew1234