Advertisement
jinhuang1102

255. Verify Preorder Sequence in Binary Search Tree

Mar 15th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. """
  2. Grandyang
  3. http://www.cnblogs.com/grandyang/p/5327635.html
  4. """
  5.  
  6. import sys
  7.  
  8. class Solution(object):
  9.     def verifyPreorder(self, preorder):
  10.         """
  11.        :type preorder: List[int]
  12.        :rtype: bool
  13.        """
  14.         low = -sys.maxsize # low 其实是bst中的root节点,也就是说left < root < right
  15.        
  16.         st = []
  17.        
  18.         for val in preorder:
  19.             if val < low:   # 如果当前的val < low 说明右子树的值小于root. 返回False
  20.                 return False
  21.            
  22.             # 这一步是在找当前val是的root节点是那个值,如果val > stack.top 就把当前top的值更新到low中,此时low里面的值是val的可能的root节点。
  23.             # 直到val < st[-1],则说明val在top值的左子树,那么上一个更新的low的值就是val的root节点。
  24.             # 如果stack为空,怎说明val是根节点的右子树,此时low为根节点
  25.             while st and val > st[-1]:
  26.                 low = st.pop()
  27.            
  28.             # 将根节点一次压入stack,为了之后寻找。
  29.             st.append(val)
  30.            
  31.         return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement