当前位置: 代码迷 >> 综合 >> *Leetcode 109. Convert Sorted List to Binary Search Tree
  详细解决方案

*Leetcode 109. Convert Sorted List to Binary Search Tree

热度:48   发布时间:2024-01-03 09:25:13.0

参考后,这个方法数据中序用的很好

<c>

/**

 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        ListNode* node = head;
        size_t n = 0; 
        while(head) {
            ++n;
            head = head->next;
        }
        
        return inorderSolver(0, n, node);
    }
    
private:
    TreeNode* inorderSolver(size_t begin, size_t end, ListNode*& node) {
        if (begin == end) return nullptr;
        size_t mid = (begin + end) / 2;
        TreeNode* left = inorderSolver(begin, mid, node);
        TreeNode* r = new TreeNode(node->val);
        node = node->next;
        r->left = left;
        r->right = inorderSolver(mid + 1, end, node);
        return r;
    }

};

<c>
  相关解决方案