题目
96. 不同的二叉搜索树
我的思路
很自然想到二叉搜索树的根的左右又是两个二叉搜索树,所以以某个值作为总数跟的二叉搜索树的种类为它左右两个子二叉树的各自种类之乘积。
应该又是动态规划的思路:1...n为节点组成的二叉搜索树的种数K(n)
K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1)
我的实现
class Solution { public: int numTrees(int n) { int K[n+1]; K[0]=1; for(int i=1;i<=n;i++){ int temp = 0; for(int j=0;j<i;j++){ temp = temp + K[j]*K[i-j-1]; } K[i] = temp; } return K[n]; } }; //应该又是动态规划的思路:1...n为节点组成的二叉搜索树的种数K(n) //K(n)=K(n-1)*K(0)+K(n-2)*K(1)+K(n-3)*K(2)+...+K(0)*K(n-1) //K(0)=K(1)=1,K(2)=2 //K(3)=2+1+2=5
时间复杂度:n^2
空间复杂度:n
拓展学习
二叉搜索树:
每个节点的左子树的所有值小于根,右子树上的所有值大于根;
中序遍历=升序遍历;