一棵高度平衡的二叉搜索樹意味着根節點的左右子樹包含相同數量的節點,也就是根節點爲有序數組的中值。node
所以,咱們將數組的中值做爲根節點,而後再遞歸分別獲得左半部分數據轉化的左子樹和右半部分數據轉化的右子樹便可。數組
遞歸終止的條件是數組爲空,這時候返回 NULL。ui
/** * 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」! spa