二叉搜索树

得到一个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;
    }
};

 
 

posted on 2017-10-18 21:25  20153868  阅读(88)  评论(0)    收藏  举报

导航