# 2024q1 Homework4 (quiz3+4)
contributed by < `yutingshih` >
## 第三週測驗題
### 測驗 1
### 測驗 2
### 測驗 3
### 測驗 4
### 測驗 5
## 第四週測驗題
### 測驗 1
### 測驗 2
### 測驗 3
<!-- 1. 解釋上述程式碼運作原理
2. 指出上述程式碼可改進之處,特別跟 AVL tree 和 red-black tree 相比,並予以實作 (考慮到循序輸入和亂序輸入的狀況)
3. 設計效能評比程式,探討上述程式碼和 Linux 核心 red-black tree 效能落差 -->
#### 程式碼運作原理
<!-- 解釋 hint -->
<!-- 解釋 __xt_remote -->
```c
static void __xt_remove(struct xt_node **root, struct xt_node *del);
```
函式 `__xt_remove` 用於在 XTree 中移除一個節點,有兩個參數,分別是 XTree 的根節點 `struct xt_node **root` 和欲移除的節點 `struct xt_node *del`,需要分別對三種狀況做處理:
1. 如果 `del` 有右子樹,以右子樹中最小節點替換 `del`,然後呼叫 `xt_update` 維護 XTree。
2. 如果 `del` 有左子樹,以左子樹中最大節點替換 `del`,然後呼叫 `xt_update` 維護 XTree。
3. 如果 `del` 是唯一的節點 (即根節點),則直接把根設為 `NULL`,,最後一樣呼叫 `xt_update` 維護 XTree。
<!-- 指出用詞不精準 -->
<!-- treeint_xt 只支援整數的型態 -->
<!-- update 的條件和 AVL tree 一樣,解釋一下 -->
<!-- 紅黑樹 -->
<!-- Linux v6.8 以後沒有 AVL tree,以前才有,為什麼? -->
<!-- AVL tree 和 rbtree 適用在不同場景 -->
<!-- xt_update -->
<!-- xt_balance -->