Question

(C++) Funtion code only AVL Trees 1) Determine if a tree is an AVL tree 2)...

(C++) Funtion code only

AVL Trees

1) Determine if a tree is an AVL tree

2) Characteristics of an AVL tree

3) Algorithm for balancing in all situations

4) Big O

Homework Answers

Answer #1
1. Checking if a given binary tree is an AVL tree or not.
#include <bits/stdc++.h>
using namespace std;
class nod { //node declaration
   public:
   int data;
   nod* l;
   nod* r;
};
nod* newNod(int d) { //creation of new node
   nod* Nod = new nod();
   Nod->data = d;
   Nod->l = NULL;
   Nod->r = NULL;
   return(Nod);
}
int max(int x, int y) { //return maximum between two values
   return (x >= y)? x: y;
}
int height(nod* node) { //get the height means the number of nodes along the longest path from the root
//node down to the farthest leaf node of the tree. 
   if(node == NULL)
      return 0;
   return 1 + max(height(node->l), height(node->r));
}
bool AVL(nod *root) {
   int lh;
   int rh;
   if(root == NULL)
      return 1;
   lh = height(root->l); // left height
   rh = height(root->r); // right height
   if(abs(lh-rh) <= 1 && AVL(root->l) && AVL(root->r)) return 1;
   return 0;
}
int main() {
   //take the nodes of the tree as input
   nod *root = newNod(7);
   root->l = newNod(6);
   root->r = newNod(12);
   root->l->l = newNod(4);
   root->l->r = newNod(5);
   root->r->r = newNod(13);
   if(AVL(root))
      cout << "The Tree is AVL Tree"<<endl;
   else
      cout << "The Tree is not AVL Tree "<<endl;
   nod *root1 = newNod(7);
   root1->l = newNod(6);
   root1->r = newNod(12);
   root1->l->l = newNod(4);
   root1->l->r = newNod(5);
   root1->r->r = newNod(13);
   root1->r->r->r = newNod(26);
   if(AVL(root1))
      cout << "The Tree is AVL Tree"<<endl;
   else
      cout << "The Tree is not AVL Tree "<<endl;
   return 0;
}
OUTPUT

The Tree is AVL Tree

The Tree is not AVL Tree

____________________________________________________________________________________________

2.Characteristics of an AVL Tree

1. AVL Trees are self balancing binary search trees.

2. Balancing factor of each node is either 0 or 1 or -1 .

3. AVL tree balances itself through the following rotation techniques :

i) Left Rotation

ii) Right Rotation

iii) Left-Right Rotation

iv) Right-Left Rotation

____________________________________________________________________________________________

3.Algorithm for balancing in all situations (in C++)

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

// An AVL tree node 
class Node 
{ 
        public: 
        int key; 
        Node *left; 
        Node *right; 
        int height; 
}; 

// A utility function to get maximum 
// of two integers 
int max(int a, int b); 

// A utility function to get the 
// height of the tree 
int height(Node *N) 
{ 
        if (N == NULL) 
                return 0; 
        return N->height; 
} 

// A utility function to get maximum 
// of two integers 
int max(int a, int b) 
{ 
        return (a > b)? a : b; 
} 

/* Helper function that allocates a 
new node with the given key and 
NULL left and right pointers. */
Node* newNode(int key) 
{ 
        Node* node = new Node(); 
        node->key = key; 
        node->left = NULL; 
        node->right = NULL; 
        node->height = 1; // new node is initially 
                                        // added at leaf 
        return(node); 
} 

// A utility function to right 
// rotate subtree rooted with y 
// See the diagram given above. 
Node *rightRotate(Node *y) 
{ 
        Node *x = y->left; 
        Node *T2 = x->right; 

        // Perform rotation 
        x->right = y; 
        y->left = T2; 

        // Update heights 
        y->height = max(height(y->left), 
                                        height(y->right)) + 1; 
        x->height = max(height(x->left), 
                                        height(x->right)) + 1; 

        // Return new root 
        return x; 
} 

// A utility function to left 
// rotate subtree rooted with x 
// See the diagram given above. 
Node *leftRotate(Node *x) 
{ 
        Node *y = x->right; 
        Node *T2 = y->left; 

        // Perform rotation 
        y->left = x; 
        x->right = T2; 

        // Update heights 
        x->height = max(height(x->left),   
                                        height(x->right)) + 1; 
        y->height = max(height(y->left), 
                                        height(y->right)) + 1; 

        // Return new root 
        return y; 
} 

// Get Balance factor of node N 
int getBalance(Node *N) 
{ 
        if (N == NULL) 
                return 0; 
        return height(N->left) - height(N->right); 
} 

// Recursive function to insert a key 
// in the subtree rooted with node and 
// returns the new root of the subtree. 
Node* insert(Node* node, int key) 
{ 
        /* 1. Perform the normal BST insertion */
        if (node == NULL) 
                return(newNode(key)); 

        if (key < node->key) 
                node->left = insert(node->left, key); 
        else if (key > node->key) 
                node->right = insert(node->right, key); 
        else // Equal keys are not allowed in BST 
                return node; 

        /* 2. Update height of this ancestor node */
        node->height = 1 + max(height(node->left), 
                                                height(node->right)); 

        /* 3. Get the balance factor of this ancestor 
                node to check whether this node became 
                unbalanced */
        int balance = getBalance(node); 

        // If this node becomes unbalanced, then 
        // there are 4 cases 

        // Left Left Case 
        if (balance > 1 && key < node->left->key) 
                return rightRotate(node); 

        // Right Right Case 
        if (balance < -1 && key > node->right->key) 
                return leftRotate(node); 

        // Left Right Case 
        if (balance > 1 && key > node->left->key) 
        { 
                node->left = leftRotate(node->left); 
                return rightRotate(node); 
        } 

        // Right Left Case 
        if (balance < -1 && key < node->right->key) 
        { 
                node->right = rightRotate(node->right); 
                return leftRotate(node); 
        } 

        /* return the (unchanged) node pointer */
        return node; 
} 

// A utility function to print preorder 
// traversal of the tree. 
// The function also prints height 
// of every node 
void preOrder(Node *root) 
{ 
        if(root != NULL) 
        { 
                cout << root->key << " "; 
                preOrder(root->left); 
                preOrder(root->right); 
        } 
} 

// Driver Code 
int main() 
{ 
        Node *root = NULL; 
        
        /* Constructing tree given in 
        the above figure */
        root = insert(root, 10); 
        root = insert(root, 20); 
        root = insert(root, 30); 
        root = insert(root, 40); 
        root = insert(root, 50); 
        root = insert(root, 25); 
        
        /* The constructed AVL Tree would be 
                                30 
                        / \ 
                        20 40 
                        / \ \ 
                10 25 50 
        */
        cout << "Preorder traversal of the "
                        "constructed AVL tree is \n"; 
        preOrder(root); 
        
        return 0; 
} 

OUTPUT

Preorder traversal of the constructed AVL tree is

30 20 10 25 40 50

___________________________________________________________________________________________

4.Big O

Time complexity

Because of Balancing property , the insertion , deletion and search operations take O(logn) in both the average and the worst cases.

Space Complexity

O(n) in both the average and the worst case.

Know the answer?
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for?
Ask your own homework help question
Similar Questions
Write code in java Implement a method to build an AVL tree out of a sorted...
Write code in java Implement a method to build an AVL tree out of a sorted (ascending order) array of unique integers, with the fastest possible big O running time. You may implement private helper methods as necessary. If your code builds a tree that is other than an AVL tree, you will not get any credit. If your code builds an AVL tree, but is not the fastest big O implementation, you will get at most 12 points. You...
2. Draw tree diagrams for two AVL trees: (a) one with a root node that has...
2. Draw tree diagrams for two AVL trees: (a) one with a root node that has a balance factor of +1 (b) one with a root note that has a balance factor of 2
Exercise 3: Multi-way Trees A way to reduce the height of tree and ensure balance is...
Exercise 3: Multi-way Trees A way to reduce the height of tree and ensure balance is to allow multiple children of nodes. In your class you learned 2-3 trees which allows up to 2 keys in a node, and the number of children is equal to the number of keys + 1. B-trees extend this concept to any arbitrary number of keys (usually number of keys is even and number of children (equal to number of keys+1) is odd). Assume...
1- Write algorithm (in pseudo-code) for the following problem: sum of the series: 1 +2+3+…+N 2-...
1- Write algorithm (in pseudo-code) for the following problem: sum of the series: 1 +2+3+…+N 2- Convert an algorithm to a flowchart diagram. 3- Counting the primitive operations of the algorithm. 4- Determine algorithm complexity. 5- Write a complete C++ program for the previous algorithm where the program should contain the following:  Display messages.  Input any number;  Display the series.  Display the sum of the series.
Consider a binary search tree where each tree node v has a field v.sum which stores...
Consider a binary search tree where each tree node v has a field v.sum which stores the sum of all the keys in the subtree rooted at v. We wish to add an operation SumLE(K) to this binary search tree which returns the sum of all the keys in the tree whose values are less than or equal to K. (a) Describe an algorithm, SumLE(K), which returns the sum of all the keys in the tree whose values are less...
(Java) For the following code segment, match the different values of the empty line with the...
(Java) For the following code segment, match the different values of the empty line with the resulting Big O complexity of the algorithm. int n = int k = 0; for (int i=0; i <= n; i++){ int j = i; while (j > 0) { // ___MISSING CODE___ k++; } } j = 0; j--; j /= 2; j = j * 2; Options for each are: O(n^3)            O(n * log n)            an...
PLEASE ONLY ANSWER E AND F A forester measured a sample of trees in a tract...
PLEASE ONLY ANSWER E AND F A forester measured a sample of trees in a tract of land being sold for a lumber harvest. Among 27 trees, she found a mean diameter of 10.4 inches and a standard deviation of 4.7 inches. Suppose her sample gives an accurate representation of the entire tract of land and that the tree diameters follow a normal distribution. Round to 2 decimal places, when applicable. (a) Sketch a graph of the distribution of tree...
Question 2 Trees a.) Draw any graph with one connected component and at least five nodes...
Question 2 Trees a.) Draw any graph with one connected component and at least five nodes which is not a tree. b.) Construct a full binary tree with exactly a height of 3. c.) How many leaf nodes does a full 4-ary tree of height 3 support?
Write a program that does the following. *Java Code* • Create an instance of the Hashtable...
Write a program that does the following. *Java Code* • Create an instance of the Hashtable class from the Java API • Make the initial table size of the hash table 1000 and the load factor 0.75 (which has been shown experimentally to be optimal). • Create an instance of the AVLtree class attached to this homework. • Measure the running time of adding various numbers of entries (as required by the table below) to the hash table and the...
Suppose that the diameters of oak trees are normally distributed with a mean of 4 feet...
Suppose that the diameters of oak trees are normally distributed with a mean of 4 feet and a standard deviation of 0.375 feet. Step 1 of 5: What is the probability of walking down the street and finding an oak tree with a diameter of more than 4.875 feet? [Remember to round probabilities to 4 decimal places] Step 2 of 5: What is the probability that the tree you find is between 4.2 and 5 feet in diameter? Step 3...