在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
广告