二叉树的递归遍历

递归得到节点个数

int countNodes(TreeNode* root) {
	if(root == null) return 0;
	int left = countNodes(root -> left);
	int right = countNodes(root -> right);
	return left+right+1;
}

二叉搜索树的创造

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。

分治法 递归

class Solution {
private:
  TreeNode *generate(vector<int> &nums, int left, int right) {
    int mid = (left + right) >> 1;
    TreeNode *res = new TreeNode(nums[mid]);
    if(mid != left)
    res->left = generate(nums, left, mid - 1);
    if(mid != right)
    res->right = generate(nums, mid + 1, right);
    return res;
  }

public:
  TreeNode *sortedArrayToBST(vector<int> &nums) {
   return generate(nums, 0, nums.size() - 1);
  }
};