กำหนดไบนารีทรีที่มีน้ำหนักของโหนด เป้าหมายคือการหาจำนวนโหนดที่มีน้ำหนักเพื่อให้เป็นจำนวนเต็มกำลังสอง หากน้ำหนักเท่ากับ 36 ก็จะเป็น 62 ดังนั้นโหนดนี้จะถูกนับ
ตัวอย่าง
อินพุต
ต้นไม้ที่จะถูกสร้างขึ้นหลังจากป้อนค่าจะได้รับด้านล่าง -
ผลลัพธ์
Count the nodes whose weight is a perfect square are: 4
คำอธิบาย
เราได้รับกับโหนดต้นไม้และน้ำหนักที่เกี่ยวข้องกับแต่ละโหนด ตอนนี้เราตรวจสอบว่าตัวเลขของโหนดเป็นกำลังสองสมบูรณ์หรือไม่
โหนด | น้ำหนัก | สี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ | ใช่/ไม่ใช่ |
---|---|---|---|
2 | 121 | 11*11 | ใช่ |
1 | 81 | 9*9 | ใช่ |
4 | 37 | เลขเด่น | ไม่ |
3 | 25 | 5*5 | ใช่ |
8 | 100 | 10*10 | ใช่ |
9 | 701 | เป็นไปไม่ได้ | ไม่ |
อินพุต
ต้นไม้ที่จะถูกสร้างขึ้นหลังจากป้อนค่าจะได้รับด้านล่าง -
ผลลัพธ์
Count the nodes whose weight is a perfect square are: 2
คำอธิบาย
we are given with the tree nodes and the weights associated with each node. Now we check whether the digits of nodes are perfect squares or not.
โหนด | น้ำหนัก | สี่เหลี่ยมจัตุรัสที่สมบูรณ์แบบ | ใช่ / ไม่ใช่ |
---|---|---|---|
2 | 11 | เป็นไปไม่ได้ | ไม่ |
1 | 16 | 4*4 | ใช่ |
4 | 4 | 2*2 | ใช่ |
3 | 26 | เป็นไปไม่ได้ | ไม่ |
8 | 1001 | เป็นไปไม่ได้ | ไม่ |
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้ −
ในแนวทางนี้ เราจะใช้ DFS กับกราฟของต้นไม้เพื่อข้ามผ่าน และตรวจสอบว่าน้ำหนักของโหนดเป็นกำลังสองสมบูรณ์หรือไม่ ใช้เวกเตอร์ Node_Weight(100) และ edge_graph[100] สองตัวเพื่อการนี้
-
เริ่มต้น Node_Weight[] ด้วยน้ำหนักของโหนด
-
สร้างต้นไม้โดยใช้ vector edge_graph
-
ใช้สี่เหลี่ยมตัวแปรส่วนกลางและเริ่มต้นด้วย 0
-
การตรวจสอบฟังก์ชัน (int check_it) ใช้จำนวนเต็มและคืนค่า จริง หาก check_it เป็นกำลังสองสมบูรณ์
-
เอาผลรวม =sqrt(check_it)
-
ตอนนี้ if(floor(total) !=ceil(total)) คืนค่า true ผลรวมไม่ใช่กำลังสองสมบูรณ์ ให้คืนค่าเท็จ
-
คืนค่า true มิฉะนั้น
-
ฟังก์ชัน perfect_square(int node, int root) รับโหนดและโหนดรูทของต้นไม้และคืนค่าจำนวนโหนดในทรีที่กำหนดซึ่งมีน้ำหนักเป็นกำลังสองสมบูรณ์
-
ถ้า if(check(Node_Weight[node])) คืนค่า true ให้เพิ่มกำลังสอง
-
ต้นไม้ขวางใน vector edge_graph[node] ใช้สำหรับวนซ้ำ
-
เรียก perfect_square(it, node) สำหรับโหนดถัดไปในเวกเตอร์
-
ที่ส่วนท้ายของฟังก์ชันทั้งหมด เราจะมีสี่เหลี่ยมจัตุรัสเท่ากับจำนวนโหนดที่มีน้ำหนักมีค่าเป็นกำลังสองสมบูรณ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; vector<int> Node_Weight(100); vector<int> edge_graph[100]; int square = 0; bool check(int check_it){ double total = sqrt(check_it); if(floor(total) != ceil(total)){ return false; } return true; } void perfect_square(int node, int root){ if(check(Node_Weight[node])){ square++; } for (int it : edge_graph[node]){ if(it == root){ continue; } perfect_square(it, node); } } int main(){ //weight of the nodes Node_Weight[2] = 121; Node_Weight[1] = 81; Node_Weight[4] = 37; Node_Weight[3] = 25; Node_Weight[8] = 100; Node_Weight[9] = 701; //create graph edge edge_graph[2].push_back(1); edge_graph[2].push_back(4); edge_graph[4].push_back(3); edge_graph[4].push_back(8); edge_graph[8].push_back(9); perfect_square(2, 2); cout<<"Count the nodes whose weight is a perfect square are: "<<square; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count the nodes whose weight is a perfect square are: 4