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

不重复的排序二叉树个数

作者: 抬头挺胸才算活着 | 来源:发表于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;
    }

相关文章

  • 不重复的排序二叉树个数

    题目:n个不同的数的排序二叉树个数解法: 我们假设我们需要的函数为F(x), 则F(0) = F(1) = 1,F...

  • 三行代码,去掉两个数组的重复元素及排序

    如题:三行代码,去掉两个数组的重复元素及排序

  • JinLou-C++day07

    冒泡排序 冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在...

  • Python冒泡排序

    冒泡排序 冒泡排序就是重复“从序列右边开始比较相邻两个数字的大小,再根据结果交换两个数字的位置”这一操作的算法。在...

  • LeetCode 823: 因子二叉树问题

    描述 给定一个数组,数组中的数不重复,且均大于1。要求使用数组中的数构建二叉树,每个数字可以被重复使用,除了叶子节...

  • 面试题3:数组中重复的数字

    题目一:找出数组中任意一个重复的数字 解法1 直接将数组排序,从头开始扫描数组是否重复,排序一个数组的时间复杂度为...

  • 02 | 如何抓住重点,系统高效地学习数据结构与算法?

    10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树; 10 个算法:递归、排序、二...

  • 第一节 内容概括

    10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树; 10 个算法:递归、排序、二...

  • 排序算法之堆排序

    堆排序基于完全二叉树 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 ...

  • 堆排序

    堆排序 概述:根据二叉树,每次将成员最大值放在堆顶,然后与堆底交换,堆底不参与下次筛选,重复以上步骤。直到从小到大...

网友评论

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

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