Solution #1: If the root is lesses than the 'min' then we know that we can trim the root as well as the entire left sub-tree. Similarly, if the root is greater than the 'max' then we know that we can trim the root as well as the entire right sub-tree. Here is the recursive code,
void freeTree(struct node* root) { if(root == NULL) return; freeTree(root->left); freeTree(root->right); free(root); } struct node* trim(struct node* root, int min, int max) { if(root == NULL) return NULL; if(root->data < min) { struct node* temp = root->right; freeTree(root->left); free(root); return trim(temp, min, max); } else if(root->data > max) { struct node* temp = root->left; freeTree(root->right); free(root); return trim(temp, min, max); } root->left = trim(root->left, min, max); root->right = trim(root->right, min, max); return root; } int main() { struct node *root; insert(&root, 100); insert(&root, 50); insert(&root, 25); insert(&root, 40); insert(&root, 30); insert(&root, 35); insert(&root, 120); insert(&root, 110); insert(&root, 32); Inorder(root); printf("\n"); root = trim(root, 30, 50); Inorder(root); printf("\n"); return 0; }
No comments:
Post a Comment