Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
給一個按照遞增順序排列的鏈表。將該鏈表轉化爲平衡二叉樹。面試
在這裏須要注意的是,由於提供的數據結構爲鏈表,因此咱們必須順序遍歷才能知道該鏈表的長度以及該鏈表的中間位置。在這裏,咱們能夠採用遞歸的形式,並且在遞歸中咱們經過雙指針的方式找到其中的中間節點。並依次遞歸左子節點和右子節點。微信
public TreeNode sortedListToBST(ListNode head) { if(head==null) return null; return sortedListToBST(head, null); } public TreeNode sortedListToBST(ListNode head, ListNode tail){ if(head==tail) return null; ListNode fast = head; ListNode slow = head; while(fast!=tail && fast.next!=tail){ fast = fast.next.next; slow = slow.next; } TreeNode cHead = new TreeNode(slow.val); cHead.left = sortedListToBST(head, slow); cHead.right = sortedListToBST(slow.next, tail); return cHead; }
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~數據結構