Python code 代码有借鉴他人
range(n),共可以写出多少种二叉查找树
以record列表记录n时的种类数
当n=0时,空树,所以record[0]=1
n=1,左子树,右子树上都没有选择数的能力,所以record[1]=recodrd[0]*record[0]
n=2,首先令根节点为1:其左子树也没有数让其挑选,右子树有一个2可 以让其挑选,所以当根节点为1时:record[2]’=record[0]*record[1]
同理,可假设根节点为2:record[2]”=record[1]*record[0]
则:record[2]=record[2]’+record[2]”
所以:record[i]=record[0]*record[i-1]+record[1]*record[i-2]+…+record[i-1]*record[0]
code:
def Num(n):
record=[0 for i in range(n+1)]
record[0]=1
i=1
while i<n:
j=0
while j<i:
record[i]+=record[j]*record[n-1-j]
j+=1
i+=1
return record[n]
if __name__=='__main__':
print(Num(3))