描述
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。
There may exist multiple valid solutions, return any of them.
您在真实的面试中是否遇到过这个题?
是
样例
给出数组 [1,2,3,4,5,6,7]
, 返回
4
/ \
2 6
/ \ / \
1 3 5 7
采用递归的方式,注意传值调用和引用调用的区别
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param A: an integer array
* @return: A tree node
*/
TreeNode * sortedArrayToBST(vector<int> &A) {
// write your code here
TreeNode * m_tree=NULL;
createtree(m_tree,A,0,A.size()-1);
return m_tree;
}
void createtree(TreeNode * &node,vector<int> &A,int low,int high){
if(low<=high){
node=new TreeNode(A[(low+high)/2]);
createtree(node->left,A,low,(low+high)/2-1);
createtree(node->right,A,(low+high)/2+1,high);
}
}
};