【LeetCode】Convert Sorted List to Binary Search Tree

来源:互联网 发布:异步网络框架 编辑:程序博客网 时间:2024/05/23 17:50

获取中间节点,注意要把链表断开成两个节点,如果节点个数为奇数,则返回最中间的节点,否则返回中间两个节点的前面那个节点

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; next = null; } * } *//** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public ListNode getMiddleNode(ListNode head){        if(head == null || head.next == null) return head;        ListNode dummy = new ListNode(-1);        dummy.next = head;        ListNode fast = head,slow = head,pre = dummy;        while(fast.next != null && fast.next.next != null){            pre = slow;            slow = slow.next;            fast = fast.next.next;        }        pre.next = null;        return slow;    }    public TreeNode sortedListToBST(ListNode head) {        if(head == null )return null;        if(head.next == null) return new TreeNode(head.val);        ListNode middle = getMiddleNode(head);        if(head == middle) head = null;//防止栈溢出,当只有两个节点时候,middle=head节点,此时head应该置为null,表示左子树为空        TreeNode root = new TreeNode(middle.val);        root.left = sortedListToBST(head);        root.right = sortedListToBST(middle.next);        return root;    }}

0 0
原创粉丝点击