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

    原题链接在这里:https://leetcode.com/problems/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.

    题解:

    找到List中点当BST的root. 中点之前当左子树,中点之后当右子树。

    递归调用,终止条件有两个: 第一,当ListNode 为 null 时返回null.

    第二,当只有一个ListNode时返回由当前点生成的TreeNode.

    Note:此处findMidLeft找到的是中点的前一个点,然后拆成三段,中点前一段,中点单独一个,中点后一段.

    Time Complexity: O(n*logn), 因为T(n) = 2*T(n/2) + n, findMidLeft 用了n时间, n是List长度。

    Space: O(logn),  一共用了O(logn) 层stack.

    AC Java:

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) { val = x; }
     7  * }
     8  */
     9 /**
    10  * Definition for a binary tree node.
    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         if(head == null){
    21             return null;
    22         }
    23         
    24         if(head.next == null){
    25             return new TreeNode(head.val);
    26         }
    27         ListNode midLeft = findMidLeft(head);
    28         ListNode mid = midLeft.next;
    29         ListNode midRight = mid.next;
    30         
    31         //Break
    32         midLeft.next = null;
    33         mid.next = null;
    34         
    35         //Create root;
    36         TreeNode root = new TreeNode(mid.val);
    37         root.left = sortedListToBST(head);
    38         root.right = sortedListToBST(midRight);
    39         return root;
    40     }
    41     
    42     private ListNode findMidLeft(ListNode head){
    43         if(head == null || head.next == null){
    44             return head;
    45         }
    46         ListNode walker = head;
    47         ListNode runner = head;
    48         while(runner.next != null && runner.next.next != null && runner.next.next.next != null){
    49             walker = walker.next;
    50             runner = runner.next.next;
    51         }
    52         return walker;
    53     }
    54     
    55 }

    类似Convert Sorted Array to Binary Search Tree.

  • 相关阅读:
    隐藏控件标签
    在线删除文件asp.net c#
    access数据库在线生成xls电子表格
    html5 css练习,弹性三栏布局
    html5 css多列布局
    Java利用webservice创建接口案例源码
    Java-Tomcat内存溢出详解
    Linux基本命令——ps/top
    Weka——如何连接MySQL数据库
    Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4824997.html
Copyright © 2011-2022 走看看