二叉搜尋樹(bst)
定義
左孩子的值全部小於根節點,右孩子的值全部大於跟結點,左孩子、右孩子同樣滿足上述條件。
假如有3個結點,總共有5個可能的bst:
1 3 3 2 1\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
問題一:給定結點的個數,計算bst的個數
分析
令f(0) = 1f(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(intn)
return
vec[n];
}
問題二:給定結點的個數,求出所有的bst
分析
遞迴實現,儲存左孩子所有的組合、右孩子所有的組合,之後按著求個數的模式組合左右孩子。
參考**
vectorgeneratetrees(intn) 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...