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.

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; next = null; }
     7  * }
     8  */
     9 /**
    10  * Definition for binary tree
    11  * public class TreeNode {
    12  *     int val;
    13  *     TreeNode left;
    14  *     TreeNode right;
    15  *     TreeNode(int x) { val = x; }
    16  * }
    17  */
    18 public class Solution {
    19     public TreeNode sortedListToBST(ListNode head) {
    20         return mySortedListToBST(head, getLength(head));
    21     }
    22 
    23     private TreeNode mySortedListToBST(ListNode head, int length) {
    24         // TODO Auto-generated method stub
    25         if (head == null || length == 0)
    26             return null;
    27         if (length == 1)
    28             return new TreeNode(head.val);
    29         int mid = length / 2;
    30         ListNode peak = head;
    31         for (int i = 0; i < mid; ++i) {
    32             peak = peak.next;
    33         }
    34         TreeNode root=new TreeNode(peak.val);
    35         root.left=mySortedListToBST(head, mid);
    36         root.right=mySortedListToBST(peak.next, length-mid-1);
    37         return root;
    38     }
    39 
    40     private int getLength(ListNode head) {
    41         // TODO Auto-generated method stub
    42         int length = 0;
    43         while (head != null) {
    44             head = head.next;
    45             length++;
    46         }
    47         return length;
    48 }
    49 }

     -------------------------------------------------------------------------------------------

    20150215

    这个写法(从上到下地来构造这棵树)有点问题:因为现在我无法在O(1)的时间内获取元素,每回都得从头开始遍历一遍,找到中间的才行。因此,我们应该要能够想到得从下到上的来构造这棵树(Each time you are stucked with the top-down approach, give bottom-up a try. ),这样的话,我们能够做到:The bottom-up approach enables us to access the list in its order at the same time as creating nodes.

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

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; next = null; }
     7  * }
     8  */
     9 /**
    10  * Definition for binary tree
    11  * public class TreeNode {
    12  *     int val;
    13  *     TreeNode left;
    14  *     TreeNode right;
    15  *     TreeNode(int x) { val = x; }
    16  * }
    17  */
    18 public class Solution {
    19     ListNode cur;
    20     public TreeNode sortedListToBST(ListNode head) {
    21         if(head==null)
    22             return null;
    23         ListNode runner=head;
    24         int size=1;
    25         cur=head;
    26         while(runner.next!=null){
    27             runner=runner.next;
    28             size++;
    29         }
    30         return makeTree(0,size-1);
    31     }
    32     public TreeNode makeTree(int start,int end){
    33         if(start>end)
    34             return null;
    35         if(start==end){
    36             TreeNode temp= new TreeNode(cur.val);
    37             cur=cur.next;
    38             return temp;
    39         }
    40         int mid=start+(end-start)/2;
    41         TreeNode left=makeTree(start,mid-1);
    42         TreeNode root=new TreeNode(cur.val);
    43         root.left=left;
    44         cur=cur.next;
    45         TreeNode right=makeTree(mid+1,end);
    46         root.right=right;
    47         return root;
    48     }
    49 }
  • 相关阅读:
    01:oracle sql developer配置
    删除eclipse或者MyEclipse的workspace记录
    c++特殊函数
    java类和对象的基础(笔记)
    java打印日历
    10_9 java笔记
    程序流程
    学习疑惑……
    位运算和逻辑运算
    多种类型的指针
  • 原文地址:https://www.cnblogs.com/Phoebe815/p/4039356.html
Copyright © 2011-2022 走看看