日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

统计和生成所有不同的二叉树

發布時間:2025/4/5 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 统计和生成所有不同的二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目】

  給定一個整數N,如果N<1,代表空樹結構,否則代表中序遍歷的結果為{1,2,3,…,N}。請返回可能的二叉樹結構有多少。

【基本思路】

  假設num[n]代表n個節點的搜索二叉樹有多少種可能。假設序列{1 , …, i , … , N},如果以i作為頭結點,i的左子樹有i-1個節點,所以可能的結構有num[i-1]種,右子樹有N-i個節點,所以有num[N-i]種可能,故以i作為頭結點的可能的結構的種數為num[i-1]*num[N-i]。?
  把從1到N分別作為頭節點,所有可能的結構加起來就是答案,利用動態規劃加速運算
?

def numTree(n):if n < 2:return 1num = [0 for i in range(n+1)]num[0] = 1for i in range(1,n+1):for j in range(1,i+1):num[i] += num[j-1] * num[i-j]return num[n]

進階問題:N的含義不變,假設可能的二叉樹結構有M種,請返回M個二叉樹的頭節點,每一顆二叉樹代表一種可能的結構

class Node:def __init__(self,value):self.value = valueself.left = Noneself.right = Nonedef generateTrees(n):return generate(1,n)def generate(start,end):res = []if start > end:res.append(None)head = Nonefor i in range(start,end+1):head = Node(i)lSubs = generate(start,i-1)rSubs = generate(i+1,end)for l in lSubs:for r in rSubs:head.left = lhead.right = rres.append(cloneTree(head))return resdef cloneTree(head):if head == None:return Noneres = Node(head.value)res.left = cloneTree(head.left)res.right = cloneTree(head.right)

?

總結

以上是生活随笔為你收集整理的统计和生成所有不同的二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。