• N3-1


    题目描述:

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

    升序数组,转二叉排序树

    解题思路:

    使用递归方法:

    选取中间的节点作为root节点,其左侧的节点构成左子树(递归调用建树),右侧的节点构成右子树。

    class Solution {
    public:
        TreeNode *sortedArrayToBST(vector<int> &num) {
            if(num.empty())
                return nullptr;//树为空
            return sortedArrayToBSTCore( num,0,num.size()-1);//对num取引用,避免了复制
        }
        
        TreeNode *sortedArrayToBSTCore(vector<int> &num, int begin,int end){
            //递归建立二叉搜索树
            if(end<begin)return nullptr;
            //if(end==begin)return num[begin];//只有一个元素时不再递归调用子树。返回类型错误应该是 TreeNode * 
    //只有一个元素时,不会调用if,不再递归,返回一个节点。因此不用特殊判断该情况 int middle = (begin+end+1)/2; //取中间元素作为root节点,如果是偶数个元素,取中间偏后一个元素作为root节点 TreeNode *pRoot = new TreeNode (num[middle]); if(middle>begin) //有左子树时 pRoot->left = sortedArrayToBSTCore(num,begin, middle-1); //middle已经被使用 if(middle<end)//有右子树 pRoot->right = sortedArrayToBSTCore(num,middle+1, end); return pRoot; } };  

    注意:

    1. 测试序列中,root的选择,当子树节点为奇数时,取中间即可(begin+end)/2,当子树节点为偶数时,取中间偏后的节点(begin+end+1)/2。由于整数除法,向下取整,可统一式子为(begin+end+1)/2。错误的写法(begin+end)/2+1;在奇数个节点时,在取了正中间节点的后一位。

    2. 除2,可以使用右移>>。(更好一些)

  • 相关阅读:
    爬虫-基于scrapy-redis两种形式的分布式爬虫
    爬虫-Scrapy框架(CrawlSpider)
    爬虫-User-Agent和代理池
    爬虫-scrapy框架之递归解析和post请求
    爬虫-scrapy数据的持久化存储
    爬虫-scrapy框架简介和基础应用
    爬虫-移动端数据爬取
    爬虫-图片懒加载技术、selenium和PhantomJS
    爬虫-验证码处理
    爬虫-requests模块
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/10515862.html
Copyright © 2020-2023  润新知