Suggestions
Use up and down arrows to review and enter to select.Please wait while we process your payment
If you don't see it, please check your spam folder. Sometimes it can end up there.
If you don't see it, please check your spam folder. Sometimes it can end up there.
Please wait while we process your payment
By signing up you agree to our terms and privacy policy.
Don’t have an account? Subscribe now
Create Your Account
Sign up for your FREE 7-day trial
Already have an account? Log in
Your Email
Choose Your Plan
Individual
Group Discount
Save over 50% with a SparkNotes PLUS Annual Plan!
Purchasing SparkNotes PLUS for a group?
Get Annual Plans at a discount when you buy 2 or more!
Price
$24.99 $18.74 /subscription + tax
Subtotal $37.48 + tax
Save 25% on 2-49 accounts
Save 30% on 50-99 accounts
Want 100 or more? Contact us for a customized plan.
Your Plan
Payment Details
Payment Summary
SparkNotes Plus
You'll be billed after your free trial ends.
7-Day Free Trial
Not Applicable
Renews December 7, 2023 November 30, 2023
Discounts (applied to next billing)
DUE NOW
US $0.00
SNPLUSROCKS20 | 20% Discount
This is not a valid promo code.
Discount Code (one code per order)
SparkNotes PLUS Annual Plan - Group Discount
Qty: 00
SparkNotes Plus subscription is $4.99/month or $24.99/year as selected above. The free trial period is the first 7 days of your subscription. TO CANCEL YOUR SUBSCRIPTION AND AVOID BEING CHARGED, YOU MUST CANCEL BEFORE THE END OF THE FREE TRIAL PERIOD. You may cancel your subscription on your Subscription and Billing page or contact Customer Support at custserv@bn.com. Your subscription will continue automatically once the free trial period is over. Free trial is available to new customers only.
Choose Your Plan
For the next 7 days, you'll have access to awesome PLUS stuff like AP English test prep, No Fear Shakespeare translations and audio, a note-taking tool, personalized dashboard, & much more!
You’ve successfully purchased a group discount. Your group members can use the joining link below to redeem their group membership. You'll also receive an email with the link.
Members will be prompted to log in or create an account to redeem their group membership.
Thanks for creating a SparkNotes account! Continue to start your free trial.
Please wait while we process your payment
Your PLUS subscription has expired
Please wait while we process your payment
Please wait while we process your payment
One of the most useful features of the tree data structure is that it can grow dynamically. That is, at any point in your code, you can make a new node and add it to the tree. Because of this you do not need to know the number of nodes beforehand. As a result, our function which will provide a new tree structure will need to allocate memory. Recall that we have a tree_t data type, defined as follows:
From this definition we can see that each node points to its left and right children. To make our node creation function mesh easily with the rest of our implementation, it should return a pointer to the memory we allocate. Here is one possible way to implementation such a function:
Alternatively, you could write a version where the caller is allowed to specify the children.
Since each node in the tree will necessarily be allocated dynamically, it must also be freed when it is no longer needed. The following function will take care of the freeing of an individual node.
While it is useful to have a function that destroys an individual node, it would be far more useful if we could make one function call to destroy an entire tree. We mentioned in the introduction that trees are naturally recursive. This function will take advantage of that feature. Destroying a tree essentially requires destroying the tree headed by the left child and the tree headed by the right child along with the root of the tree itself. With that algorithm in mind, we produce the following function:
To break down the function above, we see that there is a base case for the NULL tree, a recursive case for other trees, and finally a call to free_node to destroy the tree's root. You will find that this is a pattern that recurs frequently when writing functions to manipulate trees.
There are a few things to now consider. This implementation was based on the data in each node being an integer. It is entirely possible, however, to have each node contain some sort of dynamically allocated data. If you wanted to do this, then the new_tree function would also have to allocate space separately for the additional data. Furthermore, free_node would be need to be modified to free memory allocated to the data elements in addition to that allocated for the tree nodes.
Please wait while we process your payment