求二叉搜尋樹的中位數

2021-06-22 12:53:47 字數 757 閱讀 6529

題目:求二叉搜尋樹的中位數。

二叉搜尋樹結點定義:

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...