1. 程式人生 > >【LeetCode】【109】【Convert Sorted List to Binary Search Tree】【連結串列】

【LeetCode】【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.

For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 解題思路: 借鑑於:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/discuss/35476/Share-my-JAVA-solution-1ms-very-short-and-concise

. 連結串列轉平衡二叉樹,用遞迴。因為連結串列是有序的,所以中間節點就是根節點。根據平衡二叉樹的定義,把根節點左邊和右邊的連結串列也分別看成是平衡二叉樹,用同樣的方法解決。 程式碼:

class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
  }
    public TreeNode sortedListToBST(ListNode head) {
        if(head == null)return null;
        return toBST(head,null);

    }
    public TreeNode toBST(ListNode head,ListNode tail){
        if(head == tail)return null;
        ListNode slow=head,fast=head;
        while (fast!=tail && fast.next!=tail){
            slow = slow.next;
            fast = fast.next.next;
        }
        TreeNode root = new TreeNode(slow.val);
        root.left = toBST(head,slow);
        root.right = toBST(slow.next,tail);
        return root;
    }