- 題目一:給定一個陣列,升序陣列,將他構建成一個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樹
相關文章
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- 記一次陣列操作:陣列 A 根據陣列 B 排序陣列排序
- php 陣列根據元素從小到大排序PHP陣列排序
- 二叉排序樹BST及CRUD操作排序
- 二維陣列根據欄位進行排序陣列排序
- 二維陣列根據某個欄位排序陣列排序
- 二維陣列根據鍵的值進行排序陣列排序
- 前端學習資料結構1 二分排序樹(BST)前端資料結構排序
- 歸併排序:陣列和連結串列的多種實現排序陣列
- Android技能樹 — 陣列,連結串列,雜湊表基礎小結Android陣列
- map自定義排序,根據鍵或者值排隊排序
- python 遞迴樹狀結構 和 排序Python遞迴排序
- 反轉連結串列、合併連結串列、樹的子結構
- 148. 排序連結串列排序
- 連結串列-插入排序排序
- 資料結構——樹狀陣列資料結構陣列
- 《演算法圖解》NOTE 2 陣列、連結串列及選擇排序演算法圖解陣列排序
- 演算法:排序連結串列:歸併排序演算法排序
- js生成動態樹狀結構及排序JS排序
- 根據一個輸入資料構造二叉樹和連結串列資料結構的方法(c++)二叉樹資料結構C++
- 線性結構 陣列與連結串列陣列
- 字串陣列轉為樹形結構字串陣列
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- 高階資料結構---堆樹和堆排序資料結構排序
- LeetCode C++ 劍指 Offer 51. 陣列中的逆序對【歸併排序/樹狀陣列/線段樹】LeetCodeC++陣列排序
- List根據時間排序排序
- js根據時間排序JS排序
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 陣列排序陣列排序
- 陣列與連結串列陣列
- 陣列和連結串列陣列
- 合併K個排序連結串列排序
- 單連結串列的排序問題排序
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- Laravel 根據 relation sum 結果排序的小技巧Laravel排序
- 資料結構☞二叉搜尋樹BST資料結構
- 構建連結串列
- 【資料結構】查詢結構(二叉排序樹、ALV樹、雜湊技術雜湊表)資料結構排序
- 資料結構與演算法:二叉排序樹資料結構演算法排序