引言
从今天开始刷LeetCode,笨鸟先飞啦。LeetCode和一般IO还不太一样,一开始没搞懂如何输入,怎么就一个类的输入地方,没有头文件,没有主函数。网上搜了一下才知道,LeetCode已经把这些东西都给你写好了,你只需要写核心算法部分就可以了。
我已经不记得上次写C++代码是什么时候了,一直写Python代码,导致现在C++的语法规则都忘记了很多,尤其是结尾的分号老是忘记加,结构体定义的一些知识也忘记的差不多了。后面要加强C++的这些基础知识了。
题目描述
原文链接:https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
思路
这道题比较简单,很容易想到解法。输入的数据是升序的数组,我们只需要递归的将数组中间的数字给根节点,左边的数字给左子树,右边的数字给右子树。
代码实现
这里就贴一个核心代码
/**
* 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* sortedArrayToBST(vector<int>& nums) {
if (nums.size()==0) return NULL;
int mid = nums.size()/2;
TreeNode* root = new TreeNode(nums[mid]);
vector <int> left_nums ,right_nums;
for(int i = 0;i<mid;i++) left_nums.push_back(nums[i]);
for(int i = mid+1;i<nums.size();i++) right_nums.push_back(nums[i]);
root->left = sortedArrayToBST(left_nums);
root->right = sortedArrayToBST(right_nums);
return root;
}
};
总结
1、了解了什么是搜索树
搜索树也称排序树,其特点是左子树上的所有数子都小于根节点的数字,右子树上的所有数字都大于根节点的数字。
2、以后决定还是刷OJ的题了,还是要学习一下输入输出的操作,这个也很重要,LeetCode更注重于算法的部分。