一、最小树
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
//帮助函数
TreeNode *help(vector<int>&nums, int left, int right)
{
if(left >= right) return NULL;
int mid = (left + right) / 2;
TreeNode *node = new TreeNode(nums[mid]);
node->left = help(nums, left, mid);
node->right = help(nums, mid + 1, right);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
//由树的构造很容易想到使用递归,每个子树及树的根节点都是数组中间的值。
if(nums.size() <= 0) return NULL;
return help(nums, 0, nums.size());
}
};
总结:由于树的构建本题思路很容易想到由递归构建二叉树。需要注意的是下标的控制。
二、特定节点深度链表
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;