- 題目一:給定一個陣列,升序陣列,將他構建成一個BST
- 思路:升序陣列,這就類似於中序遍歷二叉樹得出的陣列,那麼根節點就是在陣列中間位置,找到中間位置構建根節點,然後中間位置的左右兩側是根節點的左右子樹,遞迴的對左右子樹進行處理,得出一顆BST
- 程式碼:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *sortedArrayToBST(vector<int> &num) { return sortedArrayToBST(0, num.size()-1, num); } TreeNode *sortedArrayToBST(int left, int right, vector<int> &num){ if (left > right) return NULL; int mid = (left + right)/2 + (left + right)%2 ; TreeNode *root = new TreeNode(num[mid]); root->left = sortedArrayToBST(left, mid-1, num); root->right = sortedArrayToBST(mid+1, right, num); return root; } };
- 題目二:和第一題類似,只不過陣列變成了連結串列。
- 程式碼:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *sortedListToBST(ListNode *head) { vector<int> num; if (head == NULL) return NULL; while (head){ num.push_back(head->val); head = head->next; } return sortListToBST(0, num.size()-1, num); } TreeNode *sortListToBST(int start, int end, vector<int> &num){ if (start > end) return NULL; int mid = (end + start)/2 + (end + start)%2; TreeNode *root = new TreeNode(num[mid]); root->left = sortListToBST(start, mid-1, num); root->right = sortListToBST(mid+1, end, num); return root; } };
(樹)根據排序陣列或者排序連結串列重新構建BST樹
相關文章
- 將二叉排序樹BST轉換成排序的雙向連結串列排序
- (BST)升序陣列變為BST樹陣列
- 根據陣列中物件進行排序陣列物件排序
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- php 陣列根據元素從小到大排序PHP陣列排序
- HDU 5444 Elven Postman (排序二叉樹 訪問路徑 陣列&&連結串列實現)Postman排序二叉樹陣列
- 二叉排序樹BST及CRUD操作排序
- 二維陣列根據欄位進行排序陣列排序
- 二維陣列根據某個欄位排序陣列排序
- (樹)根據中序後序構建二叉樹二叉樹
- 前端學習資料結構1 二分排序樹(BST)前端資料結構排序
- 二維陣列根據鍵的值進行排序陣列排序
- PHP二維陣列根據某個欄位排序PHP陣列排序
- 歸併排序:陣列和連結串列的多種實現排序陣列
- map自定義排序,根據鍵或者值排隊排序
- (連結串列)連結串列的排序問題排序
- 演算法根據樹的前序遍歷構建二叉樹演算法二叉樹
- 反轉連結串列、合併連結串列、樹的子結構
- JZOJ 3.10 1542——跑步(樹狀陣列+模擬+排序/歸併排序)陣列排序
- Android技能樹 — 陣列,連結串列,雜湊表基礎小結Android陣列
- 連結串列-插入排序排序
- 連結串列歸併排序排序
- 資料結構——樹狀陣列資料結構陣列
- 根據一個輸入資料構造二叉樹和連結串列資料結構的方法(c++)二叉樹資料結構C++
- 微軟面試題,將二叉排序樹轉換成雙向連結串列微軟面試題排序
- 演算法:排序連結串列:歸併排序演算法排序
- Map根據Value排序排序
- js生成動態樹狀結構及排序JS排序
- python 遞迴樹狀結構 和 排序Python遞迴排序
- 《演算法圖解》NOTE 2 陣列、連結串列及選擇排序演算法圖解陣列排序
- 資料結構之連結串列與陣列(1):陣列和連結串列的簡介資料結構陣列
- 線性結構 陣列與連結串列陣列
- 字串陣列轉為樹形結構字串陣列
- 148. 排序連結串列排序
- C語言 連結串列排序C語言排序
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 高階資料結構---堆樹和堆排序資料結構排序