题目:108. Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
题目分析:
刚开始拿到这个题目的时候,以为只要按照顺序构建一个二叉树就可以了。但是后来通过反馈的提示来看,并非如此。
这道题给出的序列是一组升序,按中序遍历可以得到。按照这个思路,数组中间的数为这个树的根节点,左边的序列为根节点的左子树,右边的序列为根节点的右子树。
同样使用递归的方法:
终结条件:节点为空(没有相应的数字)返回NULL;
该节点为叶节点(i==j) 返回单个节点;
该节点下面还有子节点(i < j) 递归。
代码:
1 class Solution { 2 public: 3 TreeNode* build(int i, int j, vector<int>& nums) 4 { 5 if(i > j) 6 return NULL; 7 if(i == j) 8 return new TreeNode(nums[i]); 9 else{ 10 int mid = (i + j + 1) / 2; 11 TreeNode* node = new TreeNode(nums[mid]); 12 node->left = build(i,mid-1,nums); 13 node->right = build(mid+1,j,nums); 14 return node; 15 } 16 } 17 TreeNode* sortedArrayToBST(vector<int>& nums) { 18 return build(0,nums.size()-1,nums); 19 } 20 };