LeetCode-七进制数、最小高度二叉搜索树

只是为了记录每天的练习(要好好加油啊呜呜呜现在的我还太拉了

思路很直接啊……就是转进制+数字转字符串。

class Solution {
public:
    string convertToBase7(int num) {
        if(num == 0)  //特殊情况  
            return "0";
        const int system = 7;//使其普遍适用于n进制
        bool flag;//记录num的正负性
        flag =  num > 0 ? true : false;
        string str;
        num = abs(num);//直接取绝对值运算
        while(num > 0)
        {
            str.append(1,num%system + '0');//append接收的是字符串或n个字符
            num /= 7;
        }
        if(!flag)
            str.push_back('-');
        reverse(str.begin(),str.end());//交换顺序
        return str;
    }
};

注意一下append的用法

str.append(num%system + '0');←如果是这么写就报错了

数字转字符串或者字符串转数字都要主要ASCII码的加减。。

题目

给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。

示例及提示

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

          0
         / \
       -3   9
       /   /
     -10  5

思路

首先,平衡二叉搜索树是一种结构平衡的二叉搜索树,即叶节点高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树(二叉搜索树定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)。又名:二叉排序树,二叉查找树

其实思路也不困难,因为是有序数组,所以每次找出数组中的中点作为根结点就好,再将中点划分的前半边数组作为左子树递归使用,右边同理。注意递归的终止条件。

/**
 * 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* createTree(vector& nums,int left,int right)
    {
        if(left > right)
            return nullptr;
        int mid = (left+right)/2;
        TreeNode* root = new TreeNode(nums[mid]);
        root->left = createTree(nums,left,mid-1);
        root->right = createTree(nums,mid+1,right);
        return root;
    }

    TreeNode* sortedArrayToBST(vector& nums) {
        return createTree(nums,0,nums.size()-1); 
    }
};

标注一下代码过程遇到的问题:

1.nullptr是c++中空指针的关键字。

2.看到题解中有人是这么写的:

auto ptr = new TreeNode(nums[mid]); //填充根节点

注意auto关键字。auto的原理就是根据后面的值,来自己推测前面的类型是什么。且用auto声明的变量必须初始化。

3.c++的构造函数用法。

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)