題目:求二叉搜尋樹的中位數。
二叉搜尋樹結點定義:
struct bstnode
};
解法一:中序遍歷
二叉搜尋樹的中序遍歷結果是有序的,利用這一特點很容易找到中位數。
**:
int treedata[100];
void inorderbst(bstnode *proot, int &count)
int medianinbst(bstnode *proot)
如果題目要求:不能額外申請記憶體;不允許使用static或global變數,該怎麼做呢?
解法二:
1. 將二叉搜尋樹按照中序遍歷的順序轉化為雙向鍊錶
2. 求鍊錶的中間節點。
void bst2dll(bstnode *proot, bstnode *&ptail)
int medianinbst(bstnode *proot)
}}
測試用例:
/* test case
10/\
6 14
/\ /\
4 8 12 16
*/void test()
解法一的空間複雜度為o(n),時間複雜度為o(n);
解法二的空間複雜度為o(n),時間複雜度為o(1)。
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 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...