108. Convert Sorted Array to Binary Search Tree

题目: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 };

 

posted @ 2017-06-13 17:21  MT.Queen  阅读(151)  评论(0编辑  收藏  举报