sally0909/Llama3_Dataset huggingface dataset:
題目: 已排序資料如何建立一棵平衡的二元搜尋樹？
答案: 我們需要在每一個節點多新增一個資訊，也就是節點的高度，透過節點的高度來得知子樹的高度，從而保持平衡。  最簡單平衡樹的想法就是讓左子樹和右子樹高度一模一樣，但這件事情實際上是不可能的，會因為樹的節點個數是奇數還是偶數而導致我們無法實現這一件事情。  我們定義AVL Tree為對於每一個左子節點的高度和右子節點的高度，兩者之間的差異必須在正負1之間。  為了平衡需用到計算BF(平衡因子)及四種旋轉方式：LL、RR、LR、RL。
評論: 題意是已排序資料、仍要建立二元搜尋樹，不是AVL樹或其他的樹，如何建成平衡的二元搜尋樹？
題目: 已排序資料如何建立一棵平衡的二元搜尋樹？
答案: 假設有一個已排序的數組 [1, 2, 3, 4, 5, 6, 7]，可以使用以下步驟來建立平衡二元搜尋樹：   	找中間節點 4，並將其作為樹的根節點。 	找到第一個節點 1到 第三個節點3的中間節點2，並將其插入到根節點的左子節點。 	找到第五個節點 5到 第七個節點7的中間節點6，並將其插入到根節點的右子節點。   將上述規則套用到剩下節點（遞迴），將會得到平衡二元搜尋樹如下圖
評論: Good!
題目: 撰寫程式碼指出如何為二元搜尋樹新增節點。
答案: base case : 是遞迴到 root 指向 null 就新增節點 並且寫入數值 設定左右分之為 NULL 才不會執行錯誤。  大於 : 新增在右邊。  小於 : 新增在左邊。  下面的程式碼多了一個條件是遇到一樣的，就在原節點 vector 做 push_back。
評論: OK
題目: 相同搜尋鍵的二筆資料如何存入二元搜尋樹？
答案: 可在每個Node都新增一個動態陣列來儲存這些元素原本的index  假設有int bst[] = { 7, 9, 3, 5, 5, 8, 2, 10 } 二元樹會長這樣                      7 (0)                 /              \             3 (2)            9 (1)           /      \            /      \       2 (6)   5(3, 4)    8(5)   10(7)
評論: OK
題目: 已排序資料如何建立一棵平衡的二元搜尋樹？
答案: 假設有一排序資料如圖一。  當我們取32(，也就是排序資料的中心)作為父節點（根節點）時，能分出兩側。  如圖二。   但這不算一個完整的平衡樹，於是應該要在左側與右側各做一遍這步驟， 也就是：取左側排序資料中心做出左子樹插入根節點左子節點。     同理：取右側排序資料中心做出右子樹插入根節點右子節點。  最後會得到平衡樹如圖三。    想法來自這個mergesort分割資料：當我們在已排序資料中標示一個位子（標示父節點）可以分割出左側資料與右側資料，與二元樹分子樹的概念很像。  而資料數量多時可以使用遞迴分割排序資料來重複上述論點。  取法可以像下圖並遞迴：
評論: Good!
題目: 舉例解說中序走訪二元搜尋樹是否穩定排序。
答案: 當二元搜尋樹定義成後續相同值歸類在右子樹時，中序走訪就是穩定排序；反之歸類在左子樹就不是。  例如用陣列[3,1,7,3,2,1,3]建立二元搜尋樹：  通過中序排序後：    這樣就能得到穩定排序。
評論: No embedded images?
題目: 舉例解說中序走訪二元搜尋樹是否穩定排序。
答案: 首先，'二元搜尋樹 其實就是 插入排序 ，差別在於二元搜尋樹在插入點是使用二元搜尋(binary search)，而插入排序則是使用線性搜尋(linear search)，因為插入排序是穩頂排序的一種，因此二元搜尋樹也是穩定排序。    如圖，因為比較是從有序序列的頭開始，也就是想要插入的元素和已經有序的最小者開始比起，如果比它大則直接插入在其後面，否則一直往後找直到找到它該插入的位置。如果碰見一個和插入元素相等的，那麼把想插入的元素直接放在相等元素的後面。所以，相等元素的前後順序沒有改變，從原無序序列出去的順序就是排好序後的順序，因此是穩定的。
評論: Good!