Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ทุกระดับด้วยจำนวนโหนดคี่และคู่ใน C++


ในปัญหานี้เราได้รับต้นไม้ และเราต้องพิมพ์ทุกระดับด้วยจำนวนโหนดที่เป็นคู่และจำนวนโหนดในนั้น

มาดูตัวอย่างเพื่อทำความเข้าใจแนวคิดกันดีกว่า

พิมพ์ทุกระดับด้วยจำนวนโหนดคี่และคู่ใน C++

ผลลัพธ์ −

Levels with odd number of nodes: 1, 3, 4
Levels with even number of nodes: 2

คำอธิบาย - ระดับแรกมีเพียง 1 องค์ประกอบ (คี่) ระดับที่ 2 ประกอบด้วยสององค์ประกอบ (คู่) ระดับที่ 3 มี 3 องค์ประกอบ (คี่) และระดับที่ 4 มี 1 องค์ประกอบ (คู่)

ตอนนี้เพื่อแก้ปัญหานี้ เราจำเป็นต้องค้นหาจำนวนโหนดในแต่ละระดับและพิมพ์ระดับคู่คี่ตามลำดับ

เราจะทำตามขั้นตอนต่อไปนี้เพื่อค้นหาวิธีแก้ปัญหา -

ขั้นตอนที่ 1 - เรียกใช้อัลกอริธึมการค้นหาสำหรับทุกระดับโดยใช้ height[node]=1+height[parent]

ขั้นตอนที่ 2 − สำหรับทุกระดับเก็บจำนวนโหนดที่ระดับนั้น

ขั้นตอนที่ 3 − วนซ้ำอาร์เรย์ที่มีองค์ประกอบ และพิมพ์ในระดับคู่และคี่

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
void traversal(int node, int parent, int height[], int vis[], vector<int> tree[]){
   height[node] = 1 + height[parent];
   vis[node] = 1;
   for (auto it : tree[node]) {
      if (!vis[it]) {
         traversal(it, node, height, vis, tree);
      }
   }
}
void insert(int x, int y, vector<int> tree[]){
   tree[x].push_back(y);
   tree[y].push_back(x);
}
void evenOddLevels(int N, int vis[], int height[]){
   int mark[N + 1];
   memset(mark, 0, sizeof mark);
   int maxLevel = 0;
   for (int i = 1; i <= N; i++) {
      if (vis[i])
         mark[height[i]]++;
      maxLevel = max(height[i], maxLevel);
   }
   cout << "The levels with odd number of nodes are: ";
   for (int i = 1; i <= maxLevel; i++) {
      if (mark[i] % 2)
         cout << i << " ";
   }
   cout << "\nThe levels with even number of nodes are: ";
   for (int i = 1; i <= maxLevel; i++) {
      if (mark[i] % 2 == 0)
         cout << i << " ";
   }
}
int main(){
   const int N = 9;
   vector<int> tree[N + 1];
   insert(1, 2, tree);
   insert(1, 3, tree);
   insert(2, 4, tree);
   insert(2, 5, tree);
   insert(5, 7, tree);
   insert(5, 8, tree);
   insert(3, 6, tree);
   insert(6, 9, tree);
   int height[N + 1];
   int vis[N + 1] = { 0 };
   height[0] = 0;
   traversal(1, 0, height, vis, tree);
   evenOddLevels(N, vis, height);
   return 0;
}

ผลลัพธ์

The levels with odd number of nodes are: 1 3 4
The levels with even number of nodes are: 2