Trees represent hierarchical relationships between individual data elements.
Non-linear data structure, differentiating trees from linear data structures like arrays, stacks, queues, and linked lists.
Graphs, as unrestricted trees, show similar hierarchical relationships.
Definition of a tree: A finite set of nodes with a designated root and subtrees.
Root: Top node with no parent; must exist in any tree.
Edges: Connections between nodes; in a tree with N nodes, there are at most N-1 edges.
Parent and Child Nodes: Parent nodes have branches to child nodes; each child node has at most one parent.
Siblings: Nodes sharing the same parent.
Leaf Nodes: Terminal nodes with no children.
Internal Nodes: Nodes with at least one child; root is an internal node if it has children.
Degree: Total number of children of a node.
Level: Starting from root at level 0, increments downward.
Height: Longest path from a leaf node to a specific node.
Depth: Total edges from root to a particular node.
Path: Sequence of nodes and edges between two nodes.
Subtree: Any child node forms a subtree encapsulating further child nodes.
Reflect structural relationships among data.
Efficient for insertion and searching.
Flexible; allows relocation of subtrees with ease.
List Representation: Nodes linked with data nodes and reference nodes.
Left Child - Right Sibling Representation: Each node has a data field, a left child reference, and a right sibling reference.
This maintains the hierarchical structure with pointers facilitating navigation.
Special tree structure where each node can have a maximum of two children (left and right).
Strictly Binary Tree: Every internal node has exactly two children or none.
Complete Binary Tree: Every internal node has two children; all leaf nodes on the same level.
Extended Binary Tree: Binary trees with dummy nodes added to fulfill full binary tree conditions.
A binary tree is defined as a set either empty or with a root and two binary trees (left/right).
Key operations:
Create(): Create an empty binary tree.
IsEmpty(bt): Check if tree is empty.
MakeBT(bt1, item, bt2): Create a new binary tree with specified subtrees.
Maximum number of nodes at level i: 2^i - 1.
Relationship between leaf and degree-2 nodes in a binary tree: leaf nodes = degree-2 nodes + 1.
In-order Traversal (left - root - right):
Visits nodes in a sequence where root is visited between its children.
Pre-order Traversal (root - left - right):
Visits root before its children, captures tree structure.
Post-order Traversal (left - right - root):
Visits children before their parent, useful for deletions.
Level-order Traversal: Implemented using queues to traverse nodes level by level.
Each node's left child must have a lesser value; right child must have a greater value.
Basic operations include search, insertion, deletion, and calculating height.
Recursive and iterative search algorithms target left or right subtrees based on comparisons with the root's key.
Locate the point in the tree for a new node based on comparisons.
Always insert nodes as leaf nodes.
Three cases determine the method of deletion:
Leaf Node: Direct removal.
One Child Node: Link child to parent's parent.
Two Children Node: Replace with largest node from left subtree or smallest node from the right subtree.
The height is defined based on the depth of nodes and is calculated recursively.