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

    涉及到二叉树的问题用递归的方法很容易理解。这个问题要求把一个升序排序的链表转换为一颗height balanced BST。转换的方式就是把链表的中间值作为树的根节点,中间值的左半部分转换为二叉树的左子树,中间值的右半部分转换为二叉树的右子树。

    递归解决问题的步骤如下:

    1. 如果链表的长度为0,返回null;

    2. 如果链表长度为1,创建新的二叉树节点node,node.left=null,node.right=null,node.val=head.val。

    3. 否则的话找到链表的中间节点,即第mid = length%2==0?length/2:length/2+1个节点为根节点node。此时链表被分成两个部分,前半部分的长度为mid-1,后半部分的长度为length-mid,递归求这两部分的结果,并把他们分别赋值给根节点的左子树和右子树。代码如下:

     1 public class Solution {
     2     public TreeNode sortedListToBST(ListNode head) {
     3         ListNode pointer = head;
     4                 
     5         int length = 0;
     6         while(pointer!=null){
     7             pointer = pointer.next;
     8             length++;
     9         }
    10         
    11         return listToBST(head, length);
    12  
    13     }
    14     
    15     public TreeNode listToBST(ListNode head,int length){
    16         if(length==0) return null;
    17         if(length==1){
    18             TreeNode node = new TreeNode(head.val);
    19             node.left = null;
    20             node.right = null;
    21             return node;
    22         }
    23         if(length==2){
    24             TreeNode node = new TreeNode(head.val);
    25             node.left = null;
    26             node.right = listToBST(head.next, 1);
    27             return node;
    28         }
    29         int mid = length%2==0?length/2:length/2+1;
    30         
    31         ListNode pointer = head;
    32         ListNode righthead = null;
    33         int i = 1;
    34         while(pointer.next!=null && i<mid-1){
    35             pointer = pointer.next;
    36             i++;
    37         }
    38         TreeNode node = new TreeNode(pointer.next.val);
    39         righthead = pointer.next.next;
    40         pointer.next = null;
    41         node.left = listToBST(head, mid-1);
    42         node.right = listToBST(righthead, length-mid);
    43         
    44         return node;
    45     }
    46 }
  • 相关阅读:
    upgrade和update的区别
    批处理文件的几种路径扩展
    CMD does not support UNC paths as current directories.的巧妙解决方案
    让批处理不回显错误信息
    python中那纠结的os.system()与空格处理
    jQuery Mobel 学习相关资料整理(一)
    c#获取某月的第一天和某月的最后一天
    Umbraco网站制作(七) 调用外部用户控件
    Umbraco网站制作(八) 实现伪静态
    Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
  • 原文地址:https://www.cnblogs.com/liujinhong/p/5415813.html
Copyright © 2011-2022 走看看