問題:
給定乙個整數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 allnum(n):
if n < 2:
return 1
num = [0 for i in range(n+1)]
num[0] = 1
for i in range(1, n+1):
for j in range(1, i+1):
num[i] += num[j-1] * num[i-j]
return num[n]
二叉樹 結構體
size large align center 二叉樹 結構體 align size 程式名稱 利用結構體建立二叉樹 written by hewei 2011 05 30 include using namespace std define max 20 定義儲存二叉樹節點的結構體 struct ...
平衡二叉樹結構
對二叉樹做深度優先遍歷,遞迴過程中 終止條件 當dfs越過葉子節點時候,返回高度0.返回數值 從低至上,返回每個節點root 為根節點的字數最大高度 左右字數的中最 當我們發現有乙個例子,左右子樹高度差 1的情況時,代表此樹不是平衡二叉樹。當發現不是平衡二叉樹時,後面的高度計算都沒有意義了,因此一路...
樹結構 二叉樹
二叉樹 如果書中的每個節點最多只有兩個子節點,這樣的樹就叫做二叉樹 1.二叉樹的重要特性 二叉樹第 i 層的最大節點數為 2 i 1 i 1 深度為 k 的二叉樹最大節點總數為 2 k 1 對於任何乙個非空二叉樹t,若n0表示葉節點的個數,n2為度為2的非空葉節點個數,那麼兩者滿足 n0 n2 1 ...