给定数量的二叉树节点 (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/

10-09 05:05