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

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

 更新時間:2021年07月22日 15:09:26   作者:Grandyang  
這篇文章主要介紹了C++實現(xiàn)LeetCode(109.將有序鏈表轉(zhuǎn)為二叉搜索樹),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(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ù)類型有所差別,一個是數(shù)組,一個是鏈表。數(shù)組方便就方便在可以通過index直接訪問任意一個元素,而鏈表不行。由于二分查找法每次需要找到中點,而鏈表的查找中間點可以通過快慢指針來操作,可參見之前的兩篇博客 Reorder List 和 Linked List Cycle II 有關(guān)快慢指針的應用。找到中點后,要以中點的值建立一個數(shù)的根節(jié)點,然后需要把原鏈表斷開,分為前后兩個鏈表,都不能包含原中節(jié)點,然后再分別對這兩個鏈表遞歸調(diào)用原函數(shù),分別連上左右子節(jié)點即可。代碼如下:

解法一:

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;
    }
};

我們也可以采用如下的遞歸方法,重寫一個遞歸函數(shù),有兩個輸入?yún)?shù),子鏈表的起點和終點,因為知道了這兩個點,鏈表的范圍就可以確定了,而直接將中間部分轉(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++實現(xiàn)LeetCode(109.將有序鏈表轉(zhuǎn)為二叉搜索樹)的文章就介紹到這了,更多相關(guān)C++實現(xiàn)將有序鏈表轉(zhuǎn)為二叉搜索樹內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

    C語言中判斷素數(shù)(求素數(shù))的思路與方法實例

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

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

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

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

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

    OPENMP?SECTIONS?CONSTRUCT原理示例解析

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

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

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

最新評論