LeetCode-109.有序連結串列轉換二叉搜尋樹(相關話題:深度優先)
阿新 • • 發佈:2018-12-14
給定一個單鏈表,其中的元素按升序排序,將其轉換為高度平衡的二叉搜尋樹。
本題中,一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:
給定的有序連結串列: [-10, -3, 0, 5, 9],
一個可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面這個高度平衡二叉搜尋樹:
0
/ \
-3 9
/ /
-10 5
解題思路:
Java程式碼:
class Solution { public TreeNode sortedListToBST(ListNode head) { int len = 0; ListNode p = head; while(null != p){ len++; p = p.next; } return dfs(head, 0, len); } private TreeNode dfs(ListNode head, int s, int e){ if(s == e) return null; TreeNode root; if(e-1 == s){ root = new TreeNode(head.val); } else { int p = (e-s)/2, q = (e-s)%2; ListNode m = head; for(int i = 0; i < p; i++) m = m.next; root = new TreeNode(m.val); root.left = dfs(head, s, s+p); root.right = dfs(m.next, s+p+1, e); } return root; } }