1. 程式人生 > >LeetCode109. 有序連結串列轉換二叉搜尋樹

LeetCode109. 有序連結串列轉換二叉搜尋樹

 題目來源:

題目描述:

 演算法描述:

由於這個連結串列是有序的連結串列。所以我們會發現連結串列的中間節點就是二叉排序樹的根節點。這樣的話就好辦了。首先我們需要快慢指標找到連結串列中間節點(快慢指標真的很好用啊!!!),那麼找到的這個結點就作為二叉排序樹的根節點了。然後連結串列的左半部分就是這個根節點的左子樹,那麼連結串列的右半部分就是這個根節點的右子樹了。然後重複操作分別對左子樹遞迴和右子樹遞迴就能得到結果了。

程式碼如下:

class Solution {  
    public TreeNode buildTreeNode(ListNode head,ListNode tail){
        if(head==tail){
            return null;
        }
        ListNode fast=head;
        ListNode slow=head;
        while(fast.next!=tail&&fast.next.next!=tail){
            slow=slow.next;
            fast=fast.next.next;
        }
        TreeNode root=new TreeNode(slow.val);
        root.left=buildTreeNode(head,slow);
        root.right=buildTreeNode(slow.next,tail);
        return root;
    }
    public TreeNode sortedListToBST(ListNode head) {
        if(head==null){
            return null;
        }
        return buildTreeNode(head,null);
    }
}

相關推薦

LeetCode109. 有序連結串列轉換搜尋

 題目來源: 題目描述:  演算法描述: 由於這個連結串列是有序的連結串列。所以我們會發現連結串列的中間節點就是二叉排序樹的根節點。這樣的話就好辦了。首先我們需要快慢指標找到連結串列中間節點(快慢指標真的很好用啊!!!),那麼找到的這個結點就作為二叉排序樹的根節

leetcode-有序連結串列轉換搜尋

有序連結串列轉換二叉搜尋樹 這道題需要定義三個指標,通過快慢指標找出中點,作為根節點,然後從頭指標head->指標last這段連結串列再遞迴呼叫sortedListToBST函式,從slow指標下一個節點開始到最後,作為後一個連結串列再進行遞迴呼叫函式sortedListToBST

LeetCode-109.有序連結串列轉換搜尋(相關話題:深度優先)

給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定的有序連結串列: [-10, -3, 0, 5, 9], 一個可能的答案是:[0, -3,

有序連結串列轉換搜尋 leetcode

給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定的有序連結串列:

leetcode 109. 有序連結串列轉換搜尋

題目描述:給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例:給定的有序連結串列: [-10, -3, 0, 5, 9], 一個可能的答案是:[0, -3,

有序連結串列搜尋

給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定的有序連結串列: [-10, -3, 0, 5, 9], 一個可能的答案是:

LeetCode 109——有序連結串列轉化搜尋

1. 題目 2. 解答 2.1. 方法一 在 LeetCode 108——將有序陣列轉化為二叉搜尋樹 中,我們已經實現了將有序陣列轉化為二叉搜尋樹。因此,這裡,我們可以先遍歷一遍連結串列,將節點的資料存入有序陣列中,然後再將有序陣列轉化為二叉搜尋樹即可。 class Solution { publ

[LeetCode] Convert Sorted List to Binary Search Tree 將有序連結串列轉為搜尋

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 這道題是要求把有序連結串列轉為二叉搜尋樹,和之前那道Convert Sorted

【LeetCode 中等題】52-有序連結串列搜尋

題目描述:給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定的有序連結串列: [-10, -3, 0, 5, 9], 一個可能的答案是:[0,

109 有序連結串列搜尋

TreeNode *BST(ListNode *begin, ListNode *end) { if (begin == end) return nullptr; ListNode *fast = begin, *slow = begin; while (fast-&g

劍指Offer 26. 搜尋與雙向連結串列搜尋

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 題目地址 https://www.nowcoder.com/practice/947f6eb80d944a84850b0538bf0ec3a5?tpId=13&tqId=1

LeetCode 108——將有序陣列轉化為搜尋

1. 題目 2. 解答 一棵高度平衡的二叉搜尋樹意味著根節點的左右子樹包含相同數量的節點,也就是根節點為有序陣列的中值。 因此,我們將陣列的中值作為根節點,然後再遞迴分別得到左半部分資料轉化的左子樹和右半部分資料轉化的右子樹即可。 遞迴終止的條件是陣列為空,這時候返

每日一題--LeetCode 108(將有序陣列轉化為搜尋) java

題目描述: 解題思路:二叉搜尋樹的特點是左子樹>根節點>右子樹,而且可以發現題目中所給的數字就是由二叉搜尋樹中序遍歷得到,陣列中間的值就為根節點,以根節點為劃分線左邊為左子樹,右邊為右子樹,然後採用二分和遞迴的思想重建二叉搜尋樹即可; 程式碼實現如下:

Leetcode 108.將有序陣列轉化為搜尋

將有序陣列轉化為二叉搜尋樹 將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序陣列: [-10,-3,0,5,9],   一個可能的答案是:[0,-

Leetcode:108.將有序陣列轉換搜尋&&Leetcode:109.將有序連結串列轉換搜尋

Leetcode:108.將有序陣列轉換為二叉搜尋樹 將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序陣列: [-10,-3,0,5,9], 一個可

109,有序連結串列轉換搜尋

給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定的有序連結串列: [-10, -3, 0, 5, 9], 一個可能的答案是:[0, -3,

LeetCode109 將排序連結串列轉換搜尋

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. For this problem, a height-balance

劍指offer----將有序連結串列轉換搜尋

題目: 給定一個升序排列的有序單鏈表,將其轉換為一棵平衡的二叉搜尋樹。 思路: 自頂向下建。 fast指標每次走兩步,slow指標每次走一步,最後fast走到最後,slow走到中間,作為根,找到

Leetcode:108.將有序陣列轉換搜尋&&Leetcode:109.將有序連結串列轉換搜尋

Leetcode:108.將有序陣列轉換為二叉搜尋樹 將一個按照升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。 本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。 示例: 給定有序陣列: [-10,-3,0,5,9],

有序單向連結串列轉換為平衡搜尋

class BSTNode { public: BSTNode(int v) { value = v; left = NULL; right = NULL; } int value; BSTNode *left; BSTNode