最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù))

 更新時(shí)間:2021年07月21日 17:02:29   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù)),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 108.Convert Sorted Array to Binary Search Tree 將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù)

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

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of everynode never differ by more than 1.

Example:

Given the sorted array: [-10,-3,0,5,9],

One possible answer is: [0,-3,9,-10,null,5], which represents the following height balanced BST:

      0
/ \
-3   9
/   /
-10  5 

這道題是要將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù),所謂二叉搜索樹(shù),是一種始終滿(mǎn)足左<根<右的特性,如果將二叉搜索樹(shù)按中序遍歷的話(huà),得到的就是一個(gè)有序數(shù)組了。那么反過(guò)來(lái),我們可以得知,根節(jié)點(diǎn)應(yīng)該是有序數(shù)組的中間點(diǎn),從中間點(diǎn)分開(kāi)為左右兩個(gè)有序數(shù)組,在分別找出其中間點(diǎn)作為原中間點(diǎn)的左右兩個(gè)子節(jié)點(diǎn),這不就是是二分查找法的核心思想么。所以這道題考的就是二分查找法,代碼如下:

解法一:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return helper(nums, 0 , (int)nums.size() - 1);
    }
    TreeNode* helper(vector<int>& nums, int left, int right) {
        if (left > right) return NULL;
        int mid = left + (right - left) / 2;
        TreeNode *cur = new TreeNode(nums[mid]);
        cur->left = helper(nums, left, mid - 1);
        cur->right = helper(nums, mid + 1, right);
        return cur;
    }
};

我們也可以不使用額外的遞歸函數(shù),而是在原函數(shù)中完成遞歸,由于原函數(shù)的參數(shù)是一個(gè)數(shù)組,所以當(dāng)把輸入數(shù)組的中間數(shù)字取出來(lái)后,需要把所有兩端的數(shù)組組成一個(gè)新的數(shù)組,并且分別調(diào)用遞歸函數(shù),并且連到新創(chuàng)建的cur結(jié)點(diǎn)的左右子結(jié)點(diǎn)上面,參見(jiàn)代碼如下:

解法二:

class Solution {
public:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        if (nums.empty()) return NULL;
        int mid = nums.size() / 2;
        TreeNode *cur = new TreeNode(nums[mid]);
        vector<int> left(nums.begin(), nums.begin() + mid), right(nums.begin() + mid + 1, nums.end());
        cur->left = sortedArrayToBST(left);
        cur->right = sortedArrayToBST(right);
        return cur;
    }
};

類(lèi)似題目:

Convert Sorted List to Binary Search Tree

參考資料:

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/discuss/35220/My-Accepted-Java-Solution

https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/discuss/35394/6-lines-Java-Accepted-Solution

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(108.將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù))的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)將有序數(shù)組轉(zhuǎn)為二叉搜索樹(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中volatile關(guān)鍵字的深入講解

    C語(yǔ)言中volatile關(guān)鍵字的深入講解

    在程序設(shè)計(jì)中,尤其是在C語(yǔ)言、C++、C#和Java語(yǔ)言中,使用volatile關(guān)鍵字聲明的變量或?qū)ο笸ǔ>哂信c優(yōu)化、多線(xiàn)程相關(guān)的特殊屬性,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言volatile關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • C++實(shí)現(xiàn)比較日期大小的示例代碼

    C++實(shí)現(xiàn)比較日期大小的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用C++實(shí)現(xiàn)比較日期大小的功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解一下
    2023-04-04
  • Opencv實(shí)現(xiàn)圖像灰度線(xiàn)性變換

    Opencv實(shí)現(xiàn)圖像灰度線(xiàn)性變換

    這篇文章主要為大家詳細(xì)介紹了Opencv實(shí)現(xiàn)圖像灰度線(xiàn)性變換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • 神奇的c/c++小游戲((提高你的編程興趣)

    神奇的c/c++小游戲((提高你的編程興趣)

    本文通過(guò)c/c++編寫(xiě)小游戲,可以提高新手們的編程興趣,接下來(lái)我們一起來(lái)看看吧
    2021-08-08
  • C語(yǔ)言之直接插入排序算法的方法

    C語(yǔ)言之直接插入排序算法的方法

    這篇文章主要為大家介紹了C語(yǔ)言直接插入排序算法的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 利用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

    利用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言實(shí)現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 淺談十進(jìn)制小數(shù)和二進(jìn)制小數(shù)之間的轉(zhuǎn)換

    淺談十進(jìn)制小數(shù)和二進(jìn)制小數(shù)之間的轉(zhuǎn)換

    下面小編就為大家?guī)?lái)一篇淺談十進(jìn)制小數(shù)和二進(jìn)制小數(shù)之間的轉(zhuǎn)換。小編覺(jué)得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • 深入理解C++內(nèi)聯(lián)函數(shù)

    深入理解C++內(nèi)聯(lián)函數(shù)

    這篇文章主要為大家介紹了C++內(nèi)聯(lián)函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單版9*9掃雷小游戲

    用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單版9*9掃雷小游戲

    這篇文章主要介紹了用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單版9*9掃雷小游戲,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • C++中stack、queue、vector的用法詳解

    C++中stack、queue、vector的用法詳解

    本文通過(guò)實(shí)例代碼給大家介紹了C++中stack、queue、vector的用法,需要的朋友參考下吧
    2017-08-08

最新評(píng)論

岑溪市| 军事| 张家口市| 滕州市| 东乌| 文山县| 扶沟县| 大名县| 德庆县| 铜山县| 平舆县| 镇坪县| 唐山市| 西峡县| 葫芦岛市| 米易县| 桃园市| 神农架林区| 抚顺市| 云梦县| 河曲县| 原平市| 秦皇岛市| 松阳县| 会同县| 郓城县| 仙居县| 武邑县| 江阴市| 五大连池市| 西和县| 东乌珠穆沁旗| 万安县| 苏尼特右旗| 进贤县| 三明市| 新疆| 通州市| 宁武县| 夏邑县| 长子县|