二叉搜索树的特点:中序遍历的序列是一个有序序列/数组。
这里主要展示有序数组转换为二叉搜索树,但是这样的二叉搜索树为多个。所以这里可以参看leetcode 108.将有序数组转换为二叉搜索树,加上了“平衡的条件”,尽管此时二叉搜索树的个数还是多个,但是在构造BST时很方便。只需要“不断的折半”即可。
参考代码:
/**
* 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) {
if(nums.size() == 0) return NULL;
//借助一个辅助函数
return build(nums, 0, nums.size() - 1);
}
TreeNode* build(vector<int>& nums, int l, int r){
if(l > r) return NULL;//递归一定要有结束条件
int mid = l + (r - l) / 2;
TreeNode* root = new TreeNode(nums[mid]);
root->left = build(nums, l, mid - 1);
root->right = build(nums, mid + 1, r);
return root;
}
};
以上就是这篇的主要内容,如有问题或疑惑请您指出,谢谢!