在C++中查找二叉树的后序遍历中的第n个节点


在这个问题中,我们给定一个二叉树和一个整数N。任务是找到二叉树后序遍历中的第n个节点。

一个二叉树有一个特殊的条件,即每个节点最多可以有两个子节点。

遍历是一个访问树中所有节点的过程,也可能打印它们的值。

让我们举个例子来理解这个问题:

输入

N = 6

输出

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

更新于:2021年3月12日

115 次查看

启动您的职业生涯

完成课程获得认证

开始
广告