二叉搜索树
得到一个A【n】的数组,首先要找中点A【m】,然后新建一个树,根节点就是中点,左子树就是A【0】-A【m-1】;右子树就是A【m+1】-A【n-1】;然后递归左子树和右子树,直到结束。。
class Solution {
public:
/**
* @param A: A sorted (increasing order) array
* @return: A tree node
*/
TreeNode *sortedArrayToBST(vector<int> &A) {
// write your code here
int l=A.size();//数组长度
if(l!=0)
{
int m;
if(l%2==0) m=l/2;
else m=1+l/2;//找中点,取得根节点的值,位置赋值给m
TreeNode *t=new TreeNode();//建立新树
t->val=A[m-1];//赋值根节点;
vector<int>::iterator ite;
vector<int>A1,A2;
ite=A.begin();
if(ite+m-1>A.begin()) A1.assign(A.begin(),ite+m-1);//首先判断该节点的左边数列是否为空,然后赋值
if(A.end()!=ite+m) A2.assign(ite+m,A.end());//右子树赋值
t->left=sortedArrayToBST(A1);//左子树递归
t->right=sortedArrayToBST(A2);//右子树递归
return t;
}
else return NULL;
}
};
浙公网安备 33010602011771号