zoukankan      html  css  js  c++  java
  • [LeetCode] 96. Unique Binary Search Trees Java

    题目:

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n?

    For example,
    Given n = 3, there are a total of 5 unique BST's.

       1         3     3      2      1
               /     /      /       
         3     2     1      1   3      2
        /     /                        
       2     1         2                 3
    题意及分析:
    给出一个整数n,用1到n的数构成一棵二叉搜索树,问有几种方式。这道题我是没有思路了,查找了网上的解题思路基本上都是一致的,即用动态规划的方法。因为对于二叉搜索树有:
    选取一个点作为根节点,然后将这棵树分成左右子树,那么以这个点作为根节点的二叉树的方法为左右二叉树可行方法的乘积,对每种可能的根节点求可行方法,然后累加起来即可得到值。以n=3时为列,维护一个一维数组作为i为根节点的方法,因为二叉搜索树中序遍历是有序的,所以:
    (1)1为根节点时,左子树0个节点,右子树2个节点,有A[0]*A[2]种方法;
    (2)2为根节点时,左子树1个节点,右子树1个节点,有A[1]*A[1]种方法;
    (3)3为根节点时,左子树2个节点,右子树0个节点,有A[2]*A[0]种方法;
    故A[3]=
    A[0]*A[2]+A[1]*A[1]+A[2]+A[0]


    代码:
    public class Solution {
    
    	public int numTrees(int n) {		//二叉搜索树 按照中根序遍历肯定是递增的
    		 if(n ==0 || n ==1) return 1;
            int[] A=new int[n+1];
            A[0] =1;
            for(int i=1;i<=n;i++){
            	for(int j=0;j<i;j++)
            		A[i] += A[j]*A[i-j-1];
            	
            }
            	return A[n];
        }
    }
    
    
    

      

     



     
  • 相关阅读:
    oracle索引学习
    (转载)Windows下手动完全卸载Oracle
    Funsion Charts 学习(二)
    Funsion Charts 学习(一)
    集合操作
    文件操作
    字典操作
    字符串操作
    列表操作
    python基本运算
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6917489.html
Copyright © 2011-2022 走看看