jinhuang1102

109. Convert Sorted List to Binary Search Tree

Jan 12th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.47 KB | None | 0 0
  1. # 这道题跟108. Convert Sorted Array to Binary Search Tree很相近,不过这道题的data structure是linked list。
  2. # 这道题的想法是先把linked list的长度算出来,然后根据linked list的长度构造出一个node的值为0的BST,
  3. # 然后利用 inorder traversal 把linked list的值填到 BST 中替换原有的 0
  4. class Solution:
  5.     def linkedListSize(self, head):
  6.         sz = 0
  7.         tmp = head
  8.         while tmp:
  9.             sz += 1
  10.             tmp = tmp.next
  11.            
  12.         return sz
  13.    
  14.    
  15.     def buildTree(self, n):
  16.         if n == 0 :
  17.             return None
  18.        
  19.         mid = n // 2
  20.         root = TreeNode(0)
  21.         root.left = self.buildTree(n - mid - 1)
  22.         root.right = self.buildTree(mid)
  23.        
  24.         return root
  25.    
  26.     def inorder(self, head, root):
  27.         node = root
  28.         st = []
  29.         while st or node:
  30.             if node:
  31.                 st.append(node)
  32.                 node = node.left
  33.             else:
  34.                 node = st.pop()
  35.                 node.val = head.val
  36.                 head = head.next
  37.                 node = node.right
  38.    
  39.        
  40.     def sortedListToBST(self, head):
  41.         """
  42.        :type head: ListNode
  43.        :rtype: TreeNode
  44.        """
  45.         if not head:
  46.             return None
  47.        
  48.         size = self.linkedListSize(head)
  49.         tree = self.buildTree(size)
  50.         self.inorder(head, tree)
  51.        
  52.         return tree
Add Comment
Please, Sign In to add comment