思路:把數字排序,排序後數字列,中間點爲父節點,左邊部分爲左子樹,右邊爲右子樹。
假設節點定義爲:
// Definition for binary tree
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
遞歸的思路實現:
TreeNode *makeArray2BST(int *a,int len)
{
TreeNode *t;
if(len == 0)
return NULL;
else if(len == 1)
{
t = new TreeNode(a[0]);
}else if(len == 2){
t = new TreeNode(a[1]);
t->left = new TreeNode(a[0]);
}else{
int n = len/2;
t = new TreeNode(a[n]);
t->left = makeArray2BST(a,n);
t->right = makeArray2BST(a+n+1,len-n-1);
}
return t;
}