zoukankan      html  css  js  c++  java
  • 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.

    Solution: 

    /**
     * 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) {
            int len = 0;
            ListNode *p = head;
            while(p){
                len++;
                p = p->next;
            }
            return sortedListToBST(head,0,len-1);
        }
    private:
        TreeNode *sortedListToBST(ListNode*& head,int l,int h){
            if(l > h) return NULL;
            int mid = l + (h-l)/2;
            TreeNode *lChiled = sortedListToBST(head,l,mid-1);
            TreeNode *p = new TreeNode(head->val);
            p->left = lChiled;
            head = head->next;
            p->right = sortedListToBST(head,mid+1,h);
            return p;
        }
    };

    这种bottom-up 方法很巧妙

    Time complexity:O(N)  

    http://leetcode.com/2010/11/convert-sorted-list-to-balanced-binary.html

  • 相关阅读:
    驾照暂时不用年审,放心了
    痛筋
    摘枣
    当了一回山村教师
    补贴山村学校照片
    心中无敌,无敌于天下
    山路
    学会珍惜
    写给部分美女们
    不打羽毛球好多年
  • 原文地址:https://www.cnblogs.com/yeek/p/3585359.html
Copyright © 2011-2022 走看看