LeetCode Convert Sorted List to Binary Search Tree

来源:互联网 发布:泡沫 网络歌手 编辑:程序博客网 时间:2024/05/18 01:09

原题链接在这里:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/

找到中点当BST的root,如此递归调用,知道只有一个点时返回由当前点生成的TreeNode,以此设为终止条件。

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

2. 递归调用时root.left 就是等于用head为argument的sortListToBST函数,因为如果进了右段,右端的头就是新的head,而不再是原有list的head.

本题与Convert Sorted Array to Binary Search Tree相似。

AC Java:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } *//** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public TreeNode sortedListToBST(ListNode head) {        if(head == null){            return null;        }        if(head.next == null){            TreeNode tn = new TreeNode(head.val);            return tn;        }        ListNode middleLeft = midList(head);        ListNode middle = middleLeft.next;        ListNode middleRight = middle.next;                TreeNode root = new TreeNode(middle.val);        middleLeft.next = null;        middle.next = null;        root.left = sortedListToBST(head);        root.right = sortedListToBST(middleRight);        return root;    }    private ListNode midList(ListNode head){        ListNode walker = head;        ListNode runner = head;        while(runner.next != null && runner.next.next != null && runner.next.next.next != null){            runner = runner.next.next;            walker = walker.next;        }        return walker;    }}


0 0
原创粉丝点击