博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
96. Unique Binary Search Trees
阅读量:6296 次
发布时间:2019-06-22

本文共 943 字,大约阅读时间需要 3 分钟。

一、题目

  1、审题

  2、分析

    给出整数 n ,求 n 个节点能组成多少个不同的二分查找数。

 

二、解答

  1、思路:

    (引自: https://leetcode.com/problems/unique-binary-search-trees/discuss/31666/DP-Solution-in-6-lines-with-explanation.-F(i-n)-G(i-1)-*-G(n-i))

      定义两个方法,G(n), F(i, n),

      ①、G(n)表示 n 个节点时共有多少种二分查找树。

      ②、 F(i, n) 表示 n 个节点时 i 为顶点,则左子树含有 i-1个节点,排序数记作G(i-1),右子树含有 n - i 个节点 ,排序数记作 G(n-i)。

      ③、G(n) = F(1,n) + F(2,n) + ... + F(n, n)

           = G(0)*G(n-1) + G(1)*G(n-2) + ... + G(n-1)*G(0);

      ④、G(1) 代表只有一个节点时的二叉查找树个数,为 1;

        G(0) 为了满足 ③ 中的计算,即 F(n,n) = G(n-1)*G(0) = G(n-1);故 G(0) = 1;

    所以,要求的即为 G(n);

public int numTrees(int n) {                int[] G = new int[n+1];        G[0] = 1;        G[1] = 1;        for (int i = 2; i <= n; i++) {        // 节点数            for (int j = 1; j <= i; j++) {    // 顶点                G[i] += G[j-1]*G[i-j];            }        }        return G[n];    }

 

      

转载于:https://www.cnblogs.com/skillking/p/9707928.html

你可能感兴趣的文章
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>