【leetcode】109. Convert Sorted List to Binary Search Tree

1790 ワード

Des:
Given a singly linked list where elements are sorted in ascending order,convert it to a height balanced BST.まずテーマの説明を見て、順番の一方向チェーンテーブルを与えて、それをバランスのとれた二叉木に変換します(最初はheiightが高さを指していると思っていましたが、後でそうではないことに気づきました).
Question:
/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */

/**
 * @param {ListNode} head
 * @return {TreeNode}
 */

var sortedListToBST = function(head) {
};

Mind:
チェーンテーブルがバランスツリーに変換される以上、すなわち、ルートノード/左サブツリー/右サブツリーを導出し、左右サブツリーに対してアルゴリズムを再帰すればよいアルゴリズムを設計します.
Answer:
//head       
var sortedListToBST = function(head) {
    if(!head) return null;   //       null   
    if(!head.next) return new TreeNode(head.val);  //head               ,       

    var mid=head; 
    var pre=head;
    var last=head;
    
   //   while           ,last  2 ,mid    ,pre    mid,       mid       
    while(last){
        last=last.next;
        if(last){
            pre=mid;
            mid=mid.next;
            last=last.next;
        }
    }
    
    pre.next=null;  //   pre             pre.next  null,      head    next  
    var root=new TreeNode(mid.val);  //    
    root.left=sortedListToBST(head); //    
    root.right=sortedListToBST(mid.next);//    
    return root; 
};

Source URL:
leetcodeトランスファゲート codeDemoトランスポートゲート