Convert Sorted List to Binary Search Tree - LeetCode

Posted 真子集

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Convert Sorted List to Binary Search Tree - LeetCode相关的知识,希望对你有一定的参考价值。

题目链接

Convert Sorted List to Binary Search Tree - LeetCode

注意点

  • 不要访问空结点
  • 题目要求的是平衡二叉搜索树(也就是AVL树)

解法

解法一:递归,二叉搜索树的中序遍历结果刚好是一个有序数组,有序数组中间的数字刚好是根节点,因此可以用二分的思想来做。不过这道题不像数组可以直接访问中间节点,要用快慢节点的方法。

/**
 * 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:
    typedef TreeNode* Tnode;
    typedef ListNode* Lnode;
    TreeNode* sortedListToBST(ListNode* head) {
        if(!head) return NULL;
        return sortedListToBST(head,NULL);
    }
    TreeNode* sortedListToBST(Lnode head,Lnode tail) {
        if(head == tail) return NULL;
        Lnode slow = head, fast = head;
        while(fast != tail && fast->next != tail)
        {
            slow = slow->next;
            fast = fast->next->next;
        }
        Tnode n = new TreeNode(slow->val);
        n->left = sortedListToBST(head,slow);
        n->right = sortedListToBST(slow->next,tail);
        return n;
    }
};

技术图片

小结

  • avl的子树高度差不超过1

以上是关于Convert Sorted List to Binary Search Tree - LeetCode的主要内容,如果未能解决你的问题,请参考以下文章

109.Convert sorted list to BST

Convert Sorted List to Binary Search Tree

Convert Sorted List to Balanced BST

109. Convert Sorted List to Binary Search Tree

Convert Sorted List to Binary Search Tree

convert-sorted-list-to-binary-search-tree