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

ค้นหาโหนดที่ n ในการข้ามผ่าน Postorder ของ Binary Tree ใน C++


ในปัญหานี้ เราได้รับไบนารีทรีและจำนวนเต็ม N ภารกิจคือการค้นหาโหนดที่ n ในการข้ามผ่าน Postorder ของทรีไบนารี

ต้นไม้ไบนารีมีเงื่อนไขพิเศษที่แต่ละโหนดสามารถมีลูกได้สูงสุดสองคน

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

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน

อินพุต

N = 6

ค้นหาโหนดที่ n ในการข้ามผ่าน Postorder ของ Binary Tree ใน C++

ผลลัพธ์

3

คำอธิบาย

การข้ามผ่านของต้นไม้ − 4, 5, 2, 6, 7, 3, 1

แนวทางการแก้ปัญหา

แนวคิดคือการใช้การข้ามผ่านคำสั่งหลังของต้นไม้ไบนารีซึ่งทำได้โดยใช้การเรียกซ้ำ ในการโทรแต่ละครั้ง เราจะพบการเรียก postOrder() สำหรับทรีย่อยทางซ้ายก่อน จากนั้นจึงเรียก postOrder() และในตอนท้าย ให้ไปที่โหนดรูท ในระหว่างการข้ามผ่านนี้ เราจะนับจำนวนโหนดและพิมพ์โหนดที่นับเป็น N

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

ตัวอย่าง

#include <iostream>
using namespace std;
bool isAPrimeNumber(int n) {
   if (n <= 1) return false;
   if (n <= 3) return true;
   if (n%2 == 0 || n%3 == 0) return false;
   for (int i=5; i*i<=n; i=i+6)
      if (n%i == 0 || n%(i+2) == 0)
         return false;
   return true;
}
long int calcPrimeProduct(long int n) {
   long int p = 2;
   n--;
   for (int i = 3; n != 0; i++) {
      if (isAPrimeNumber(i)) {
         p = p * i;
         n--;
      }
      i++;
   }
   return p;
}
long int findNextPrime(long int n) {
   long int nextPrime = n + 2;
   while (true) {
      if (isAPrimeNumber(nextPrime))
         break;
      nextPrime++;
   }
   return nextPrime;
}
int main() {
   long long int N = 5;
   long long int primeProduct = calcPrimeProduct(N);
   int fortunateNumber = findNextPrime(primeProduct) - primeProduct;
   cout<<N<<"th fortunate number is "<<fortunateNumber;
   return 0;
}

ผลลัพธ์

5th fortunate number is 23