继续刷LeetCode,第108题,输入一个从小到大的有序表,建立一个平衡二叉树,注:该二叉树并不唯一。
分析:
既然给定的是有序表,那么就可以通过类似二分查找的方式,中间值,然后作为根节点。然后递归到左右子树中,再寻找中间位置的数,作为根节点。最后输出二叉树。
问题:
1、给二叉树赋值的时候得先创建二叉树的节点。
2、考虑为空的情况;
附上代码:
/**
* 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 n=nums.size();
if(n==0)
return NULL;
TreeNode * root;
root=insertMid(root,0,n-1,nums);
return root;
}
TreeNode* insertMid(TreeNode* root,int low,int high,vector<int>& nums)
{
int mid=(low+high)/2;
if(low>high)
return NULL;
root=new TreeNode(nums[mid]);
root->left=insertMid(root->left,low,mid-1,nums);
root->right=insertMid(root->right,mid+1,high,nums);
return root;
}
};