给定数量的二叉树节点 (X) 写入方法,该方法返回具有 X 节点的二叉树的随机排列数。
示例:
X=1: 1
o
X=2: 2
o o
o o
X=3: 5
o o o o o
o o o o o o
o o o o
我结束了:
public static int numOfPerms(int numOfNodes) {
if (numOfNodes<=2 && numOfNodes > 0) {
return numOfNodes;
}
int res = 1;
for (int i=1; i<=numOfNodes; i++) {
res = res*(4*i-1)/(i+1);
}
return res;
}
我很感激在这里分享更好的解决方案。
最佳答案
试试这个递归方法:
static int numOfPerms(int numOfNodes) {
if (numOfNodes == 1) {
return 1;
}
numOfNodes = numOfNodes - 1;
return ((numOfPerms(numOfNodes) * (2*numOfNodes+2) *
(2*numOfNodes+1))/((numOfNodes+1)*(numOfNodes+2)));
}
关于java - 如何找到可能的二叉树拓扑排列的数量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11397349/