把有序数组转化成平衡的二叉搜索树。
以下摘自百度百科:
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法 平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,可以参考Fibonacci数列 1是根节点 F(n-1)是左子树的节点数量 F(n-2)是右子数的节点数量。
找到数组中间的那个数,作为根节点,然后对该数左右两边的数继续递归查找中间的数,作为左右子树的根节点,直到查找完所有的数。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(num.empty()) return NULL;
return buildTree(num, 0, num.size()-1);
}
TreeNode *buildTree(vector<int> &num, int low, int high){
int mid = (high+low)/2;
TreeNode *root = new TreeNode(num[mid]);
if(low < mid) root->left = buildTree(num, low, mid-1);
if(high > mid) root->right = buildTree(num, mid+1, high);
return root;
}
};