美文网首页
不重复的排序二叉树个数

不重复的排序二叉树个数

作者: 抬头挺胸才算活着 | 来源:发表于2020-04-04 15:45 被阅读0次

    题目:n个不同的数的排序二叉树个数
    解法:

    我们假设我们需要的函数为F(x), 则F(0) = F(1) = 1,F(2) = 2, F(3) = 5【可以自行检验】
    ① 当1为根节点的时候:那么剩下的元素只能全部在右边:那么右子树唯一的个数为当n为三的时候的个数:F(3)
    ② 当2为根节点的时候:那么1只能在左边,剩下的3和4只能在右边,左边只有一种组成方式,右边有F(2)种组成方式。
    ③ 当3为根节点的时候,右边只有4,左边有1和2,跟2为根节点的情况一样。
    ④ 当4为根节点的时候,剩下的元素只能全部在左边,那么有F(3)种组成方式。
    所以总的组成方式就是上面4种情况的总和。

        public static int numTrees(int n){
            int[] buff = new int[n+1];
            buff[0] = 1;
            buff[1] = 1;
            return numTrees(n, buff);
        }
    
        private static int numTrees(int n, int[] buff){
            if(buff[n]!=0)
                return buff[n];
    
            int temp = 0;
            for (int i = 0; i < n; i++) {
                temp += numTrees(i, buff) * numTrees(n-1-i, buff);
            }
            buff[n] = temp;
            return temp;
        }
    

    相关文章

      网友评论

          本文标题:不重复的排序二叉树个数

          本文链接:https://www.haomeiwen.com/subject/qgdjphtx.html