文章标题
2017-03-15 17:15
169 查看
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:
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 if __name__=='__main__': print(Num(3))