题解 | #将升序数组转化为平衡二叉搜索树#
将升序数组转化为平衡二叉搜索树
http://www.nowcoder.com/practice/7e5b00f94b254da599a9472fe5ab283d
首先理解一下平衡二叉搜索树(BST),看题中给的例子:
输入:[-1,0,1,2]
输出:
{1,0,2,-1}
也就是
图比较丑,根节点取值为1,最后一层节点是-1。
然后,结合题目,需要根据输入来构建输出,那关键点就是确定根节点,因为得到根节点后,序列就分为
【左子树 跟节点 右子树】了,然后递归调用就搞定了。
给定一个区间[start,end],根节点的下标如何确定呢?找找规律,可以发现 根节点下标就是index = (start+end+1)/2,为的是把填不满的叶子节点最终放置到左子树中。
好了,下面可以写代码了
class Solution { public: /** * * @param num int整型vector * @return TreeNode类 */ TreeNode* sortedArrayToBST(vector<int>&num, int start, int end){ if(start>end) return NULL; int mid = (start + end+1)/2; TreeNode* root = new TreeNode(num[mid]); root->left = sortedArrayToBST(num, start, mid -1); root->right = sortedArrayToBST(num, mid+1, end); return root; } TreeNode* sortedArrayToBST(vector<int>& num) { // write code here return sortedArrayToBST(num,0,num.size()-1); } };