LeetCode 108——將有序陣列轉化為二叉搜尋樹
阿新 • • 發佈:2018-11-25
1. 題目
2. 解答
一棵高度平衡的二叉搜尋樹意味著根節點的左右子樹包含相同數量的節點,也就是根節點為有序陣列的中值。
因此,我們將陣列的中值作為根節點,然後再遞迴分別得到左半部分資料轉化的左子樹和右半部分資料轉化的右子樹即可。
遞迴終止的條件是陣列為空,這時候返回 NULL。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* sortedArrayToBST(vector<int>& nums) {
int num = nums.size();
if (num == 0) return NULL; // 陣列為空
int mid = num / 2;
TreeNode * tree = new TreeNode(nums[mid]); // 中值作為根節點
vector<int> left_nums = vector<int>(nums.begin(), nums.begin() + mid);
tree->left = sortedArrayToBST(left_nums); // 左子樹
vector<int> right_nums = vector<int>(nums.begin() + mid + 1, nums.end());
tree->right = sortedArrayToBST(right_nums); // 右子樹
return tree;
}
};
獲取更多精彩,請關注「seniusen」!