Code With Python
39K subscribers
841 photos
24 videos
22 files
746 links
This channel delivers clear, practical content for developers, covering Python, Django, Data Structures, Algorithms, and DSA – perfect for learning, coding, and mastering key programming skills.
Admin: @HusseinSheikho || @Hussein_Sheikho
Download Telegram
Topic: Data Structures – Trees – Part 1 of 4: Introduction and Binary Trees

---

### 1. What is a Tree in Data Structures?

A tree is a non-linear hierarchical data structure consisting of nodes connected by edges. It's widely used in real-world applications like:

• File systems
• Databases (e.g., B-Trees)
• Compilers (parse trees)
• Artificial intelligence (decision trees)

---

### 2. Terminologies in Trees

Node: Basic unit of a tree
Root: Topmost node (only one)
Parent/Child: A node that connects to another below/above
Leaf: A node with no children
Edge: Connection between parent and child
Subtree: Any child node and its descendants
Depth: Distance from the root to a node
Height: Longest path from a node to a leaf
Degree: Number of children a node has

---

### 3. Binary Tree Basics

A Binary Tree is a tree in which each node has at most two children, referred to as:

Left child
Right child

#### Real-life example:

Imagine a family tree where each person can have two children.

---

### 4. Types of Binary Trees

Full Binary Tree – every node has 0 or 2 children
Perfect Binary Tree – all internal nodes have 2 children, and all leaves are at the same level
Complete Binary Tree – all levels are filled except possibly the last, which is filled from left to right
Skewed Tree – all nodes only have one child (left or right)
Balanced Binary Tree – the height difference of left and right subtrees is minimal

---

### 5. Binary Tree Representation in Python

Using Class & Object:

class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None

# Example
root = Node(1)
root.left = Node(2)
root.right = Node(3)


---

### 6. Tree Traversals

Tree traversal means visiting all the nodes of a tree in a specific order.

Inorder (LNR)
Preorder (NLR)
Postorder (LRN)
Level Order (BFS using queue)

#### Example – Inorder Traversal (Left → Root → Right):

def inorder(root):
if root:
inorder(root.left)
print(root.data, end=" ")
inorder(root.right)


---

### 7. Build a Simple Binary Tree and Traverse It

# Tree Structure:
# 1
# / \
# 2 3
# / \
# 4 5

root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)

print("Inorder Traversal:")
inorder(root) # Output: 4 2 5 1 3


---

### 8. Applications of Binary Trees

• Expression evaluation
• Search algorithms (Binary Search Trees)
• Priority queues (Heaps)
• Huffman encoding trees (data compression)
• Syntax trees in compilers

---

### 9. Key Characteristics

• Recursive nature makes tree problems suitable for recursion
• Not sequential – can't be represented with only arrays or lists
• Memory-efficient using pointers in linked structure

---

### 10. Summary

• Trees are hierarchical and non-linear
• Binary trees limit nodes to max 2 children
• Various types of binary trees serve different use cases
• Tree traversal is fundamental for solving tree problems

---

### Exercise

Create a class-based binary tree and implement:
• Inorder, Preorder, and Postorder traversals
• Function to count total nodes and leaf nodes

---

#DSA #BinaryTree #DataStructures #Python #TreeTraversal

https://t.me/DataScience4
7