二叉搜尋樹的個數

2022-02-19 01:23:45 字數 1067 閱讀 2876

二叉搜尋樹(bst)

定義

左孩子的值全部小於根節點,右孩子的值全部大於跟結點,左孩子、右孩子同樣滿足上述條件。

假如有3個結點,總共有5個可能的bst:

1         3     3      2      1

\ / / / \ \

3 2 1 1 3 2

/ / \ \

2 1 2 3

問題一:給定結點的個數,計算bst的個數

分析

令f(0) = 1

f(1) = f(0)*f(0)

f(2) = f(1)*f(0) + f(0)*f(1)

f(3) = f(2)*f(0) + f(1)*f(1) + f(0)*f(2)

……f(n) = f(n-1)*f(0) + f(n-2)*f(1) +……f(0)*f(n-1)

參考**

int numtrees(int

n)

return

vec[n];

}

問題二:給定結點的個數,求出所有的bst

分析

遞迴實現,儲存左孩子所有的組合、右孩子所有的組合,之後按著求個數的模式組合左右孩子。

參考**

vectorgeneratetrees(int

n) vector

generate(int beg, int

end)

for (int key = beg; key <= end; ++key)}}

return

vec;

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

二叉搜尋樹 二叉搜尋樹的刪除操作

如圖刪除 7,4,2直接刪除接可以 如圖 刪除6把7拉上去 如圖 刪除3 4沒有左孩子直接返回4 所以最後的結果只是4覆蓋3 上 class solution if key root.val else if key root.val else else if root.right null else...