Sciweavers


Book

An Introduction to Binary Search Trees and Balanced Trees

15 years 9 months ago
An Introduction to Binary Search Trees and Balanced Trees
"Libavl is a library in ANSI C for manipulation of various types of binary trees. This book provides an introduction to binary tree techniques and presents all of Libavl’s source code, along with annotations and exercises for the reader. It also includes practical information on how to use Libavl in your programs and discussion of the larger issues of how to choose efficient data structures and libraries. The book concludes with suggestions for further reading, answers to all the exercises, glossary, and index."
Ben Pfaff
Added 14 Feb 2009
Updated 14 Feb 2009
Authors Ben Pfaff
Preface 
Acknowledgements
1 Introduction
1.1 Audience
1.2 Reading the Code
1.3 Code Conventions
1.4 License 
2 The Table ADT 
2.1 Informal Definition 
2.2 Identifiers.
2.3 Comparison Function 
2.4 Item and Copy Functions 
2.5 Memory Allocation 
2.6 Creation and Destruction
2.7 Count 
2.8 Insertion and Deletion
2.9 Assertions
2.10 Traversers 
2.10.1 Constructors 
2.10.2 Manipulators 
2.11 Table Headers
2.12 Additional Exercises.
3 Search Algorithms 
3.1 Sequential Search 
3.2 Sequential Search with Sentinel.
3.3 Sequential Search of Ordered Array
3.4 Sequential Search of Ordered Array with Sentinel
3.5 Binary Search of Ordered Array
3.6 Binary Search Tree in Array 
3.7 Dynamic Lists 
4 Binary Search Trees 
4.1 Vocabulary
4.1.1 Aside: Differing Definitions
4.2 Data Types
4.2.1 Node Structure
4.2.2 Tree Structure
4.2.3 Maximum Height
4.3 Rotations 
4.4 Operations
4.5 Creation
4.6 Search
4.7 Insertion 
4.7.1 Aside: Root Insertion 
4.8 Deletion
4.8.1 Aside: Deletion by Merging
4.9 Traversal 
4.9.1 Traversal by Recursion
4.9.2 Traversal by Iteration
4.9.2.1 Improving Convenience 
4.9.3 Better Iterative Traversal
4.9.3.1 Starting at the Null Node.
4.9.3.2 Starting at the First Node
4.9.3.3 Starting at the Last Node 
4.9.3.4 Starting at a Found Node
4.9.3.5 Starting at an Inserted Node
4.9.3.6 Initialization by Copying 
4.9.3.7 Advancing to the Next Node
4.9.3.8 Backing Up to the Previous Node 
4.9.3.9 Getting the Current Item
4.9.3.10 Replacing the Current Item 
4.10 Copying
4.10.1 Recursive Copying
4.10.2 Iterative Copying
4.10.3 Error Handling 
4.11 Destruction
4.11.1 Destruction by Rotation
4.11.2 Aside: Recursive Destruction 
4.11.3 Aside: Iterative Destruction 
4.12 Balance
4.12.1 From Tree to Vine
4.12.2 From Vine to Balanced Tree 
4.12.2.1 General Trees
4.12.2.2 Implementation 
4.12.2.3 Implementing Compression 
4.13 Aside: Joining BSTs
4.14 Testing
4.14.1 Testing BSTs.
4.14.1.1 BST Verification 
4.14.1.2 Displaying BST Structures
4.14.2 Test Set Generation
4.14.3 Testing Overflow 
4.14.4 Memory Manager.
4.14.5 User Interaction 
4.14.6 Utility Functions
4.14.7 Main Program 
4.15 Additional Exercises.
5 AVL Trees 
5.1 Balancing Rule
5.1.1 Analysis
5.2 Data Types
5.3 Operations
5.4 Insertion 
5.4.1 Step 1: Search
5.4.2 Step 2: Insert
5.4.3 Step 3: Update Balance Factors
5.4.4 Step 4: Rebalance 
5.4.5 Symmetric Case
5.4.6 Example 
5.4.7 Aside: Recursive Insertion
5.5 Deletion
5.5.1 Step 1: Search
5.5.2 Step 2: Delete
5.5.3 Step 3: Update Balance Factors
5.5.4 Step 4: Rebalance 
5.5.5 Step 5: Finish Up 
5.5.6 Symmetric Case
5.6 Traversal 
5.7 Copying 
5.8 Testing 
6 Red-Black Trees 
6.1 Balancing Rule
6.1.1 Analysis
6.2 Data Types
6.3 Operations
6.4 Insertion 
6.4.1 Step 1: Search
6.4.2 Step 2: Insert
6.4.3 Step 3: Rebalance 
6.4.4 Symmetric Case
6.4.5 Aside: Initial Black Insertion
6.4.5.1 Symmetric Case
6.5 Deletion
6.5.1 Step 2: Delete
6.5.2 Step 3: Rebalance 
6.5.3 Step 4: Finish Up 
6.5.4 Symmetric Case
6.6 Testing 
7 Threaded Binary Search Trees
7.1 Threads 
7.2 Data Types
7.3 Operations
7.4 Creation
7.5 Search
7.6 Insertion 
7.7 Deletion
7.8 Traversal 
7.8.1 Starting at the Null Node 
7.8.2 Starting at the First Node
7.8.3 Starting at the Last Node 
7.8.4 Starting at a Found Node
7.8.5 Starting at an Inserted Node
7.8.6 Initialization by Copying 
7.8.7 Advancing to the Next Node
7.8.8 Backing Up to the Previous Node 
7.9 Copying 
7.10 Destruction
7.11 Balance
7.11.1 From Tree to Vine
7.11.2 From Vine to Balanced Tree 
7.12 Testing
8 Threaded AVL Trees
8.1 Data Types
8.2 Rotations.
8.3 Operations
8.4 Insertion 
8.4.1 Steps 1 and 2: Search and Insert
8.4.2 Step 4: Rebalance 
8.4.3 Symmetric Case
8.5 Deletion
8.5.1 Step 1: Search
8.5.2 Step 2: Delete
8.5.3 Step 3: Update Balance Factors
8.5.4 Step 4: Rebalance 
8.5.5 Symmetric Case
8.5.6 Finding the Parent of a Node
8.6 Copying 
8.7 Testing 
9 Threaded Red-Black Trees
9.1 Data Types
9.2 Operations
9.3 Insertion 
9.3.1 Steps 1 and 2: Search and Insert
9.3.2 Step 3: Rebalance 
9.3.3 Symmetric Case
9.4 Deletion
9.4.1 Step 1: Search
9.4.2 Step 2: Delete
9.4.3 Step 3: Rebalance 
9.4.4 Step 4: Finish Up 
9.4.5 Symmetric Case
9.5 Testing 
10 Right-Threaded Binary Search Trees.
10.1 Data Types 
10.2 Operations 
10.3 Search 
10.4 Insertion
10.5 Deletion 
10.5.1 Right-Looking Deletion 
10.5.2 Left-Looking Deletion
10.5.3 Aside: Comparison of Deletion Algorithms 
10.6 Traversal
10.6.1 Starting at the First Node.
10.6.2 Starting at the Last Node
10.6.3 Starting at a Found Node 
10.6.4 Advancing to the Next Node 
10.6.5 Backing Up to the Previous Node
10.7 Copying
10.8 Destruction
10.9 Balance
10.10 Testing 
11 Right-Threaded AVL Trees.
11.1 Data Types 
11.2 Operations 
11.3 Rotations
11.4 Insertion
11.4.1 Steps 1–2: Search and Insert 
11.4.2 Step 4: Rebalance
11.5 Deletion 
11.5.1 Step 1: Search 
11.5.2 Step 2: Delete 
11.5.3 Step 3: Update Balance Factors 
11.5.4 Step 4: Rebalance
11.6 Copying
11.7 Testing
12 Right-Threaded Red-Black Trees 
12.1 Data Types 
12.2 Operations 
12.3 Insertion
12.3.1 Steps 1 and 2: Search and Insert 
12.3.2 Step 3: Rebalance
12.4 Deletion 
12.4.1 Step 2: Delete 
12.4.2 Step 3: Rebalance
12.4.3 Step 4: Finish Up
12.5 Testing
13 BSTs with Parent Pointers
13.1 Data Types 
13.2 Operations 
13.3 Insertion
13.4 Deletion 
13.5 Traversal
13.5.1 Starting at the First Node.
13.5.2 Starting at the Last Node
13.5.3 Starting at a Found Node 
13.5.4 Starting at an Inserted Node 
13.5.5 Advancing to the Next Node 
13.5.6 Backing Up to the Previous Node
13.6 Copying
13.7 Balance
13.8 Testing
14 AVL Trees with Parent Pointers 
14.1 Data Types 
14.2 Rotations
14.3 Operations 
14.4 Insertion
14.4.1 Steps 1 and 2: Search and Insert 
14.4.2 Step 3: Update Balance Factors 
14.4.3 Step 4: Rebalance
14.4.4 Symmetric Case 
14.5 Deletion 
14.5.1 Step 2: Delete 
14.5.2 Step 3: Update Balance Factors 
14.5.3 Step 4: Rebalance
14.5.4 Symmetric Case 
14.6 Traversal
14.7 Copying
14.8 Testing
15 Red-Black Trees with Parent Pointers 
15.1 Data Types 
15.2 Operations 
15.3 Insertion
15.3.1 Step 2: Insert 
15.3.2 Step 3: Rebalance
15.3.3 Symmetric Case 
15.4 Deletion 
15.4.1 Step 2: Delete 
15.4.2 Step 3: Rebalance
15.4.3 Step 4: Finish Up
15.4.4 Symmetric Case 
15.5 Testing
Appendix A References 
Appendix B Supplementary Code 
B.1 Option Parser 
B.2 Command-Line Parser 
Appendix C Glossary 
Appendix D Answers to All the Exercises 
Appendix E Catalogue of Algorithms
Binary Search Tree Algorithms.
AVL Tree Algorithms 
Red-Black Tree Algorithms 
Threaded Binary Search Tree Algorithms
Threaded AVL Tree Algorithms
Threaded Red-Black Tree Algorithms
Right-Threaded Binary Search Tree Algorithms
Right-Threaded AVL Tree Algorithms
Right-Threaded Red-Black Tree Algorithms
Binary Search Tree with Parent Pointers Algorithms
AVL Tree with Parent Pointers Algorithms
Red-Black Tree with Parent Pointers Algorithms
Appendix F Index
Comments (0)