zoukankan      html  css  js  c++  java
  • 【LeetCode】109. Convert Sorted List to Binary Search Tree

    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.

    为了满足平衡要求,容易想到提出中间节点作为树根,因为已排序,所以左右两侧天然满足BST的要求。

    左右子串分别递归下去,上层根节点连接下层根节点即可完成。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode *sortedListToBST(ListNode *head) {
            if(head == NULL)
                return NULL;
            else if(head->next == NULL)
                return new TreeNode(head->val);
            ListNode* mid = findMid(head);
            TreeNode* root = new TreeNode(mid->val);
            root->left = sortedListToBST(head);
            root->right = sortedListToBST(mid->next);
            return root;
        }
        ListNode* findMid(ListNode* head)
        {
            ListNode* preslow = NULL;
            ListNode* slow = head;
            ListNode* fast = head;
            while(fast != NULL)
            {
                fast = fast->next;
                if(fast != NULL)
                {
                    fast = fast->next;
                    preslow = slow;
                    slow = slow->next;
                }
            }
            //break the list into two parts
            preslow->next = NULL;
            return slow;
        }
    };

  • 相关阅读:
    异常处理
    集合面试题
    数据结构
    集合遍历
    集合汇总
    Collections工具类
    HashMap和hashTable的区别
    Map接口和Collection接口的区别
    Spark应用远程调试
    使用 maskView 设计动画
  • 原文地址:https://www.cnblogs.com/ganganloveu/p/4061909.html
Copyright © 2011-2022 走看看