/**
* 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) {
if(num.size() == 0)
return NULL;
TreeNode * root = BST(num, 0, num.size() - 1);
return root;
}
TreeNode *BST(vector<int> &num, int left, int right)
{
if(left < right)
{
int middle = left + ((right - left)>>1);
TreeNode *root = new TreeNode(num[middle]);
//root->val = num[middle];
root->left = BST(num, left, middle - 1);
root->right = BST(num, middle + 1, right);
return root;
}
else if(left == right)
{
TreeNode *root = new TreeNode(num[left]);
return root;
}
else
return NULL;
}
};
题目给定了一个已排序的数组,要求将其转化为平衡二叉查找树。
思路是是根据平衡二叉树的特点,根节点在数组中中间位置,左孩子为中间位置到起始位置的中间,
又孩子在中间位置到数组尾的中间,按此规律递归求解。与二分查找的原理有相通之处。
代码编提交后刚开始出现runtime error,看了半天没发现问题,后面返现是节点初始化除了问题。
起先初始化用了上面注释的那一句,此时,结构体中的两个指正未被初始化而产生错误。