DATA STRUCTURES · TREE CHAPTER · ★★★ (95%)

Binary Tree Traversal প্রিঅর্ডার, ইনঅর্ডার, পোস্টঅর্ডার ও লেভেল অর্ডার — ছবি দেখে ধাপে ধাপে সমাধান

এই নোটে ট্রি ট্র্যাভার্সাল একদম শুরু থেকে শেখানো হয়েছে — কোনো ধাপ বাদ না দিয়ে, প্রতিটি ধাপের পেছনের কারণসহ। শেষে খাতায় লেখার মতো এক্স্যাক্ট Exam Answer দেওয়া আছে।

Root → Left → Right = Preorder Left → Root → Right = Inorder Left → Right → Root = Postorder BFS level-by-level = Level order
1

Question

Original Exam Question

প্রশ্ন (যেভাবে পরীক্ষায় আসে):

Given the following binary tree, write down its Preorder, Inorder, Postorder, and Level order traversal. Also define Root, Leaf, Height, Depth, Full, Complete, and Perfect binary tree, with the maximum-node formulas.

2

Prerequisite Concepts

বাংলায়
🌳 Tree কী?

Tree হলো একটা hierarchical (স্তরবিন্যাস করা) ডেটা স্ট্রাকচার — অনেকটা পারিবারিক বংশতালিকার মতো। একদম উপরে একটা Root (মূল) node থাকে, আর তার নিচে ধাপে ধাপে Children (সন্তান) node গুলো ছড়িয়ে থাকে। Tree-তে কোনো cycle (চক্র) থাকে না — মানে কোনো node থেকে ঘুরে আবার সেই node-এ ফিরে আসার রাস্তা নেই।

🌿 Binary Tree কী?

যে Tree-এর প্রতিটা node-এর সর্বোচ্চ দুইটা child থাকতে পারে — একটা Left child আর একটা Right child — তাকে বলে Binary Tree। "Binary" শব্দটাই বলে দিচ্ছে দুই সংখ্যক সম্ভাবনা: বাম আর ডান।

মূল Terminology (পরিভাষা) — প্রতিটার মানে ও কেন দরকার
টার্মমানে (বাংলায়)কেন জানা দরকার
Nodeট্রি-এর প্রতিটা বক্স/উপাদান, যাতে একটা value থাকেTraversal মানেই প্রতিটা node visit করা — তাই node কী বুঝতে হবে
Rootসবচেয়ে উপরের node, যার কোনো parent নেইপ্রতিটা traversal-এর সংজ্ঞাই Root-এর position দিয়ে আলাদা হয়
Leafযে node-এর কোনো child নেইRecursion কোথায় থামবে (base case) সেটা Leaf দিয়েই বোঝা যায়
Parent / Childউপরের node parent, নিচের node childট্রি-এর সম্পর্ক বোঝাতে দরকার
Subtreeযেকোনো node-কে root ধরে তার নিচের পুরো অংশTraversal-এর সবচেয়ে জরুরি কৌশল — subtree ভাগ করেই সমাধান করা হয়
HeightRoot থেকে সবচেয়ে গভীর leaf পর্যন্ত edge-এর সংখ্যাComplexity ও max-node formula-তে লাগে
DepthRoot থেকে নির্দিষ্ট একটা node পর্যন্ত edge-এর সংখ্যাLevel বের করতে লাগে
💡 কেন Traversal শিখতে হবে?

Tree-এর প্রতিটা data linear (সিরিয়াল) না — array বা list-এর মতো এক লাইনে নেই। তাই সব node-কে একটা নির্দিষ্ট নিয়মে "ভ্রমণ" (traverse) করে visit করার পদ্ধতিই হলো Traversal। এক্সপ্রেশন evaluate করা, ফাইল সিস্টেম দেখানো, সার্চ করা — সব জায়গায় Traversal লাগে।

3

Exam Definition

English

Tree Traversal is the process of visiting every node of a tree exactly once in a systematic manner.

  • Preorder Traversal: Visit the Root, then traverse the Left subtree, then traverse the Right subtree (Root → Left → Right).
  • Inorder Traversal: Traverse the Left subtree, then visit the Root, then traverse the Right subtree (Left → Root → Right).
  • Postorder Traversal: Traverse the Left subtree, then the Right subtree, then visit the Root (Left → Right → Root).
  • Level Order Traversal: Visit nodes level by level, from left to right, using Breadth-First Search (BFS) with a queue.
4

Concept Explanation

বাংলায়

একটা জিনিস মনে রাখলেই তিনটা traversal মুখস্থ হয়ে যাবে — "Root কোথায় বসছে?"

TraversalOrderRoot-এর position
PreorderRoot → Left → Rightসবার প্রথমে
InorderLeft → Root → Rightমাঝে
PostorderLeft → Right → Rootসবার শেষে
Level orderLevel অনুযায়ী উপর থেকে নিচে, প্রতি লেভেলে বাম থেকে ডানে (BFS)
🔁 কেন এটা Recursive?

প্রতিটা subtree নিজেই একটা ছোট ট্রি — তারও একটা root, left, right আছে। তাই একই নিয়ম (Root/Left/Right-এর অর্ডার) প্রতিটা subtree-তে বারবার প্রয়োগ করলেই পুরো ট্রি traverse হয়ে যায়। এটাই Recursion-এর মূল ধারণা: বড় সমস্যাকে ছোট, একই-রকম সমস্যায় ভাঙা।

5

Algorithm

English / Pseudocode
// Preorder: Root → Left → Right
Preorder(node):
    if node is NULL: return
    visit(node)                 // Root first
    Preorder(node.left)         // then Left
    Preorder(node.right)        // then Right

// Inorder: Left → Root → Right
Inorder(node):
    if node is NULL: return
    Inorder(node.left)          // Left first
    visit(node)                 // then Root
    Inorder(node.right)         // then Right

// Postorder: Left → Right → Root
Postorder(node):
    if node is NULL: return
    Postorder(node.left)        // Left first
    Postorder(node.right)       // then Right
    visit(node)                 // Root last

// Level Order: BFS with a queue
LevelOrder(root):
    if root is NULL: return
    queue.enqueue(root)
    while queue is not empty:
        node = queue.dequeue()
        visit(node)
        if node.left  != NULL: queue.enqueue(node.left)
        if node.right != NULL: queue.enqueue(node.right)
6

Step-by-Step Explanation

বাংলায় — অ্যালগরিদম কীভাবে কাজ করে
1

Base Case চেক করা — if node is NULL: return

কী হচ্ছে: ফাংশনটা প্রথমেই দেখে node-টা আসলে আছে কি না।

কেন দরকার: এটা না থাকলে Recursion কখনো থামবে না — Leaf-এর নিচেও (যেটা NULL) আবার call হতে যাবে এবং প্রোগ্রাম ক্র্যাশ করবে। এটাই Recursion-এর "থামার শর্ত"।

2

Root visit + দুই দিকের Recursive call

কী হচ্ছে: Preorder-এ আগে Root visit হয়, তারপর নিজেকে (একই ফাংশন) Left child দিয়ে আবার call করে, তারপর Right child দিয়ে call করে।

কেন দরকার: Left subtree-টা যতক্ষণ না পুরোপুরি শেষ হচ্ছে, ততক্ষণ Right subtree-তে যাওয়া হয় না — এটাই নিশ্চিত করে বাম দিকের সব node আগে আসবে।

3

Level Order-এ Queue ব্যবহার (Recursion না)

কী হচ্ছে: Root প্রথমে queue-তে ঢোকে। তারপর queue থেকে একটা node বের করে visit করে, তার left ও right child থাকলে queue-তে ঢুকিয়ে দেয়। এটা চলতেই থাকে যতক্ষণ queue খালি না হয়।

কেন Queue (Stack না): Queue হলো FIFO (First In, First Out) — যেটা আগে ঢুকেছে সেটাই আগে বের হয়। এতে করে উপরের level আগে শেষ হয়ে তারপর নিচের level শুরু হয় — মানে "level-by-level" আচরণটা স্বাভাবিকভাবেই তৈরি হয়।

7

ASCII Diagram + Solve — Question 1

6-node tree
        A
       / \
      B   C
     / \    \
    D   E    F
⚠️ লক্ষ্য করো

C-এর শুধু ডান পাশে child F আছে — বাম দিক খালি। এই জিনিসটা মিস করলেই ভুল উত্তর হবে। ছবি না দেখে অনুমান করে বসলে এখানেই সবচেয়ে বেশি ভুল হয়।

1

ট্রি-কে Subtree-তে ভাগ করা

কী করলাম: পুরো ট্রি-টাকে তিন ভাগে ভাগ করলাম — Root, Root-এর Left subtree, আর Root-এর Right subtree।

Root               = A
Left subtree of A  = { B, D, E }   (B root, D বামে, E ডানে)
Right subtree of A = { C, F }      (C root, বাম খালি, F ডানে)
কেন এটা প্রথমে করলাম

বড় ট্রি একসাথে মাথায় রেখে traverse করা কঠিন। কিন্তু Root আর তার দুই subtree আলাদা করে ফেললে, প্রতিটা subtree-কে একটা ছোট, স্বাধীন সাব-প্রবলেম হিসেবে সমাধান করা যায় — এটাই Recursion-এর হাতে-কলমে প্রয়োগ।

2

Preorder বসানো (Root → Left → Right)

A+ [B, D, E]+ [C, F]

কী করলাম: আগে Root (A), তারপর পুরো Left subtree-এর preorder (B, D, E), তারপর পুরো Right subtree-এর preorder (C, F) — পাশাপাশি বসিয়ে দিলাম।

ফলাফল: A, B, D, E, C, F

3

Inorder বসানো (Left → Root → Right)

[D, B, E]+ A+ [C, F]

কী করলাম: B-subtree-এর ভেতরে D আগে (B-এর বাম child), তারপর B নিজে, তারপর E (B-এর ডান child) — তাই B-subtree-এর inorder হলো D, B, E। এরপর Root A, তারপর C-subtree-এর inorder (C-এর বাম খালি, তাই C তারপর F) → C, F।

ফলাফল: D, B, E, A, C, F

4

Postorder বসানো (Left → Right → Root)

[D, E, B]+ [F, C]+ A

কী করলাম: B-subtree-এ D, E আগে তারপর B (postorder = D, E, B)। C-subtree-এ বাম খালি, তাই F আগে তারপর C (postorder = F, C)। সবশেষে Root A।

ফলাফল: D, E, B, F, C, A

9

Final Exam Answer — Question 1

English only

Preorder: A, B, D, E, C, F

Inorder: D, B, E, A, C, F

Postorder: D, E, B, F, C, A

Level order: A, B, C, D, E, F

8

Solve — Question 2

9-node tree
            1
          /   \
         2     3
        / \   / \
       4   5 6   7
          /       \
         8         9
1

Subtree ভাগ করা

Root                = 1
Left subtree of 1   = { 2, 4, 5, 8 }
Right subtree of 1  = { 3, 6, 7, 9 }

Left subtree-এর ভেতরে: 2-এর বাম child 4, ডান child 5; আর 5-এর বাম child 8 (5-এর ডান খালি)।
Right subtree-এর ভেতরে: 3-এর বাম child 6, ডান child 7; আর 7-এর ডান child 9 (7-এর বাম খালি)।

2

চারটা Traversal বসানো

Preorder (Root→Left→Right): 1, তারপর {2,4,5,8}-subtree = 2,4,5,8, তারপর {3,6,7,9}-subtree = 3,6,7,9

Inorder (Left→Root→Right): {4,2,8,5}, তারপর 1, তারপর {6,3,7,9}

Postorder (Left→Right→Root): {4,8,5,2}, তারপর {6,9,7,3}, তারপর 1

Level order (BFS, level ধরে ধরে): Level 1 → 1; Level 2 → 2,3; Level 3 → 4,5,6,7; Level 4 → 8,9

Question 2 — সব Traversal একসাথে
TraversalAnswer
Preorder1, 2, 4, 5, 8, 3, 6, 7, 9
Inorder4, 2, 8, 5, 1, 6, 3, 7, 9
Postorder4, 8, 5, 2, 6, 9, 7, 3, 1
Level order1, 2, 3, 4, 5, 6, 7, 8, 9
✅ Final Exam Answer — Question 2

Preorder: 1, 2, 4, 5, 8, 3, 6, 7, 9

Inorder: 4, 2, 8, 5, 1, 6, 3, 7, 9

Postorder: 4, 8, 5, 2, 6, 9, 7, 3, 1

Level order: 1, 2, 3, 4, 5, 6, 7, 8, 9

8.1

Terminology & Formulas — Question 3

★★ Short Question
টার্মসংজ্ঞা
Rootসবচেয়ে উপরের node
Leafযার কোনো child নেই
Height of treeRoot থেকে সবচেয়ে গভীর leaf পর্যন্ত edge-এর সংখ্যা
Depth of nodeRoot থেকে সেই node পর্যন্ত edge-এর সংখ্যা
LevelDepth + 1 (বই ভেদে সংজ্ঞা আলাদা হতে পারে — খাতায় definition লিখে দিও)
Full binary treeপ্রতিটা node-এর 0 বা 2টা child
Complete binary treeশেষ level ছাড়া সব level ভরতি, আর শেষ level বাম থেকে ভরতি
Perfect binary treeসব leaf একই level-এ, সব internal node-এর 2টা child
Formulas
  • Level L-এ max node = 2^(L−1) (level 1 থেকে শুরু ধরে)
  • Height h-এর tree-তে max node = 2^(h+1) − 1
  • n node-এর tree-এর min height = ⌊log₂ n⌋
  • Traversal complexity = O(n) (প্রতিটা node ঠিক একবার visit হয়)
10

Common Mistakes

  • ✗
    এক পাশে child থাকলে সেটা বাম না ডান — গুলিয়ে ফেলা। ছবি ভালো করে না দেখে অনুমান করলেই ভুল হয়। সবসময় node-এর position (বাম কোণায় না ডান কোণায়) দেখে সিদ্ধান্ত নাও।
  • ✗
    Postorder-এ Root আগে বা মাঝে বসিয়ে ফেলা। মনে রাখো — Postorder-এ Root সবার শেষে, Preorder-এ Root সবার আগে।
  • ✗
    Level Order-কে Preorder-এর মতো recursion দিয়ে করার চেষ্টা। Level Order আসলে Queue-ভিত্তিক BFS, recursion (DFS) না।
  • ✗
    Subtree bracket না করে সরাসরি answer লেখা। এতে বড় ট্রি-তে node miss হয়ে যাওয়ার সম্ভাবনা বেড়ে যায়। প্রতিটা subtree-কে আলাদা bracket করে তারপর জোড়া লাগাও।
  • ✗
    Height আর Depth গুলিয়ে ফেলা। Height মাপা হয় leaf থেকে, Depth মাপা হয় নির্দিষ্ট node পর্যন্ত — দুটোই Root থেকে edge গুনে বের করা হয়, কিন্তু প্রসঙ্গ আলাদা।
11

Viva Questions

Q: Preorder আর Postorder-এর মধ্যে মূল পার্থক্য কী?
A: দুটোতেই Left subtree আগে Right subtree-এর আগে যায়, কিন্তু Root-এর position আলাদা — Preorder-এ Root সবার আগে, Postorder-এ Root সবার শেষে।
Q: একই সেট node দিয়ে দুইটা ভিন্ন ট্রি বানানো গেলে, শুধু Inorder traversal দিয়ে কি ট্রি-টা uniquely নির্ধারণ করা যায়?
A: না, শুধু Inorder দিয়ে যায় না। কিন্তু Inorder + Preorder (অথবা Inorder + Postorder) একসাথে থাকলে ট্রি uniquely পুনর্গঠন করা যায়।
Q: Level Order Traversal-এ কেন Queue ব্যবহার করা হয়, Stack না?
A: Queue FIFO (আগে ঢোকা আগে বের হওয়া) — এতে উপরের level সম্পূর্ণ visit হয়ে তারপর নিচের level শুরু হয়। Stack ব্যবহার করলে LIFO আচরণের কারণে level-ভিত্তিক ক্রম নষ্ট হয়ে যেত।
Q: Traversal-এর Time Complexity কত, এবং কেন?
A: O(n) — কারণ প্রতিটা node ঠিক একবার visit হয় এবং প্রতিবার constant কাজ (visit + দুইটা recursive call/queue operation) করা হয়।
Q: Full আর Complete binary tree-এর পার্থক্য কী?
A: Full tree-তে প্রতিটা node-এর 0 বা 2টা child থাকে (level পূর্ণ হওয়া লাগে না)। Complete tree-তে শেষ level ছাড়া সব level পূর্ণ থাকে, আর শেষ level বাম থেকে ভরাট হয়।
12

Practice Questions

Exam Style
  1. Draw a binary tree with 7 nodes where node C has only a right child and no left child. Write its Preorder, Inorder, and Postorder traversal.
  2. Given a binary tree, write its Level Order traversal and show the contents of the queue after each dequeue operation.
  3. Given the Inorder and Preorder traversal of a binary tree, reconstruct the original tree.
  4. For a binary tree of height 4, calculate the maximum possible number of nodes.
  5. Determine whether the given binary tree is a Full binary tree, a Complete binary tree, both, or neither. Justify your answer.
  6. Find the height and depth of each node in the given binary tree.
  7. Write the recursive pseudocode for Postorder traversal and explain each line.
  8. Given a binary tree with 15 nodes, find its minimum possible height.
  9. Perform Preorder, Inorder, and Postorder traversal on the given binary tree and show the subtree grouping used at each step.
  10. Explain, with an example, why Inorder traversal alone is not sufficient to uniquely reconstruct a binary tree.
← আগের০৪. Dijkstra's Algorithm পরের →০৬. Traversal থেকে Tree বানানো
CSE 123 · Data Structures — পড়ার খাতা  ·  সব টপিক  ·  Cheat Sheet
←☰→