欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實(shí)現(xiàn)LeetCode(109.將有序鏈表轉(zhuǎn)為二叉搜索樹)

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

[LeetCode] 109.Convert Sorted List to Binary Search Tree 將有序鏈表轉(zhuǎn)為二叉搜索樹

Given a singly linked list 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 every node never differ by more than 1.

Example:

Given the sorted linked list: [-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

這道題是要求把有序鏈表轉(zhuǎn)為二叉搜索樹,和之前那道 Convert Sorted Array to Binary Search Tree 思路完全一樣,只不過是操作的數(shù)據(jù)類型有所差別,一個(gè)是數(shù)組,一個(gè)是鏈表。數(shù)組方便就方便在可以通過index直接訪問任意一個(gè)元素,而鏈表不行。由于二分查找法每次需要找到中點(diǎn),而鏈表的查找中間點(diǎn)可以通過快慢指針來操作,可參見之前的兩篇博客 Reorder List 和 Linked List Cycle II 有關(guān)快慢指針的應(yīng)用。找到中點(diǎn)后,要以中點(diǎn)的值建立一個(gè)數(shù)的根節(jié)點(diǎn),然后需要把原鏈表斷開,分為前后兩個(gè)鏈表,都不能包含原中節(jié)點(diǎn),然后再分別對(duì)這兩個(gè)鏈表遞歸調(diào)用原函數(shù),分別連上左右子節(jié)點(diǎn)即可。代碼如下:

解法一:

class Solution {
public:
    TreeNode *sortedListToBST(ListNode* head) {
        if (!head) return NULL;
        if (!head->next) return new TreeNode(head->val);
        ListNode *slow = head, *fast = head, *last = slow;
        while (fast->next && fast->next->next) {
            last = slow;
            slow = slow->next;
            fast = fast->next->next;
        }
        fast = slow->next;
        last->next = NULL;
        TreeNode *cur = new TreeNode(slow->val);
        if (head != slow) cur->left = sortedListToBST(head);
        cur->right = sortedListToBST(fast);
        return cur;
    }
};

我們也可以采用如下的遞歸方法,重寫一個(gè)遞歸函數(shù),有兩個(gè)輸入?yún)?shù),子鏈表的起點(diǎn)和終點(diǎn),因?yàn)橹懒诉@兩個(gè)點(diǎn),鏈表的范圍就可以確定了,而直接將中間部分轉(zhuǎn)換為二叉搜索樹即可,遞歸函數(shù)中的內(nèi)容跟上面解法中的極其相似,參見代碼如下:

解法二:

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        if (!head) return NULL;
        return helper(head, NULL);
    }
    TreeNode* helper(ListNode* head, ListNode* tail) {
        if (head == tail) return NULL;
        ListNode *slow = head, *fast = head;
        while (fast != tail && fast->next != tail) {
            slow = slow->next;
            fast = fast->next->next;
        }
        TreeNode *cur = new TreeNode(slow->val);
        cur->left = helper(head, slow);
        cur->right = helper(slow->next, tail);
        return cur;
    }
};

類似題目:

Convert Sorted Array to Binary Search Tree

參考資料:

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

https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/discuss/35476/Share-my-JAVA-solution-1ms-very-short-and-concise.

https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/discuss/35470/Recursive-BST-construction-using-slow-fast-traversal-on-linked-list

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

相關(guān)文章

  • C++實(shí)現(xiàn)路口交通燈模擬系統(tǒng)

    C++實(shí)現(xiàn)路口交通燈模擬系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)路口交通燈模擬系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 深入C++中API的問題詳解

    深入C++中API的問題詳解

    本篇文章是對(duì)C++中API的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)掃雷小游戲完整算法詳解(附完整代碼)

    C語言實(shí)現(xiàn)掃雷小游戲完整算法詳解(附完整代碼)

    掃雷游戲想必我們都有玩過,那么今天就用C語言來簡(jiǎn)單實(shí)現(xiàn)“掃雷”小游戲,這篇文章主要給大家介紹了關(guān)于C語言實(shí)現(xiàn)掃雷小游戲完整算法的相關(guān)資料,文中給出了完整的實(shí)例代碼,需要的朋友可以參考下
    2022-06-06
  • 基于Qt+OpenCV實(shí)現(xiàn)圖像灰度化像素

    基于Qt+OpenCV實(shí)現(xiàn)圖像灰度化像素

    在圖像處理領(lǐng)域,OpenCV是一款強(qiáng)大而廣泛應(yīng)用的開源庫(kù),能夠提供豐富的圖像處理和計(jì)算機(jī)視覺功能,本文將介紹如何利用Qt?編輯器調(diào)用OpenCV庫(kù)對(duì)照片進(jìn)行換底色處理,實(shí)現(xiàn)更加獨(dú)特和吸引人的效果
    2023-11-11
  • C語言數(shù)組實(shí)現(xiàn)掃雷游戲

    C語言數(shù)組實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語言數(shù)組實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C語言中判斷素?cái)?shù)(求素?cái)?shù))的思路與方法實(shí)例

    C語言中判斷素?cái)?shù)(求素?cái)?shù))的思路與方法實(shí)例

    計(jì)算機(jī)或者相關(guān)專業(yè)基本上大一新生開始學(xué)編程都會(huì)接觸的一個(gè)問題就是判斷質(zhì)數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中判斷素?cái)?shù)(求素?cái)?shù))的思路與方法,需要的朋友可以參考下
    2022-03-03
  • 在C++中如何阻止類被繼承詳解

    在C++中如何阻止類被繼承詳解

    這篇文章主要介紹了在C++中如何阻止類被繼承,對(duì)于C++初學(xué)者而言可以通過本文實(shí)例更好的理解類的原理及運(yùn)用,需要的朋友可以參考下
    2021-09-09
  • C++Vector容器常用函數(shù)接口詳解

    C++Vector容器常用函數(shù)接口詳解

    最近我學(xué)習(xí)了C++中的STL庫(kù)中的vector容器,對(duì)于常用容器,我們不僅要會(huì)使用其常用的函數(shù)接口,我們還有明白這些接口在其底層是如何實(shí)現(xiàn)的。所以特意整理出來一篇博客供我們學(xué)習(xí)
    2022-08-08
  • OPENMP?SECTIONS?CONSTRUCT原理示例解析

    OPENMP?SECTIONS?CONSTRUCT原理示例解析

    這篇文章主要為大家介紹了OPENMP?SECTIONS?CONSTRUCT原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 順序線性表的代碼實(shí)現(xiàn)方法

    順序線性表的代碼實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄樞蚓€性表的代碼實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評(píng)論