jinhuang1102

105. Construct Binary Tree from Preorder and Inorder Travers

Jan 13th, 2019
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.69 KB | None | 0 0
  1. # Approach I: Recursive 的方法比较好理解,用deque替代原有的list可以减小时间复杂度。
  2. from collections import deque
  3.  
  4. class Solution:
  5.     def helper(self, preorder, inorder):
  6.         if not preorder or not inorder:
  7.             return None
  8.        
  9.         val = preorder.popleft()
  10.         idx = inorder.index(val)
  11.        
  12.         root = TreeNode(val)
  13.         root.left = self.helper(preorder, inorder[:idx])
  14.         root.right = self.helper(preorder, inorder[idx+1:])
  15.        
  16.         return root
  17.    
  18.    
  19.     def buildTree(self, preorder, inorder):
  20.         """
  21.        :type preorder: List[int]
  22.        :type inorder: List[int]
  23.        :rtype: TreeNode
  24.        """
  25.         pre_q = deque()
  26.         pre_q.extend(preorder)
  27.         res = self.helper(pre_q, inorder)
  28.         return res
  29.        
  30.  
  31. # Approach II: 貌似运用inorder traversal 的方法做的还不太明白
  32. class Solution:
  33.     def buildTree(self, preorder, inorder):
  34.         """
  35.        :type preorder: List[int]
  36.        :type inorder: List[int]
  37.        :rtype: TreeNode
  38.        """
  39.         if not preorder:
  40.             return None
  41.        
  42.         root = TreeNode(preorder[0])
  43.         stack = []
  44.         stack.append(root)
  45.        
  46.         pre = 1
  47.         ino = 0
  48.         while (pre < len(preorder)):
  49.             curr = TreeNode(preorder[pre])
  50.             pre += 1
  51.             prev = None
  52.             while stack and stack[-1].val == inorder[ino]:
  53.                 prev = stack.pop()
  54.                 ino += 1
  55.             if prev:
  56.                 prev.right = curr
  57.             else:
  58.                 stack[-1].left = curr
  59.                
  60.             stack.append(curr)
  61.         return root
Advertisement
Add Comment
Please, Sign In to add comment