> For the complete documentation index, see [llms.txt](https://garychang.gitbook.io/data-structure/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://garychang.gitbook.io/data-structure/lecture2-tree-and-binary-tree/lecture-2.8-advanced-trees/2.8.3-symmetric-min-max-heap.md).

# 2.8.3 - Symmetric Min-Max Heap

### 1. 定義

&#x20;是一個Complete Binary Tree，Root不存Data，滿足:

1. 左兄弟 ≤ 右兄弟
2. 節點x的祖父的左子點必須 ≤ x
3. 節點x的祖父的右子點必須 ≥ x

對於節點i來說，i的左子點是i的子樹中的最小值(不含i)。

對於節點i來說，i的右子點是i的子樹中的最大值(不含i)。

### 2. 運作

#### 2.1 Insert x in an SMMH

1. 將x放置於最後一個節點的下一個位置
2. 檢查是否滿足: 左兄弟 ≤ 右兄弟，若違反則左右對調
3. 檢查是否滿足: 節點x的祖父的左子點必須 ≤ x，若違反則對調
4. 檢查是否滿足: 節點x的祖父的右子點必須 ≥ x，若違反則對調

#### 2.2 Delete min in an SMMH

1. 從Root的左子點取出最小值，形成空格E
2. 檢查是否滿足: 左兄弟 ≤ 右兄弟
3. 找出k = min{E的左子點, E的右兄弟的左子點}，若x ≤ k，則將x置入E；若x > k則將k置入E，E則變到k原先的位置。重複此步驟直到滿足。
