My LeetCode grinding. Trying to do a problem a day.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

12345678910111213141516171819202122232425262728293031
  1. class TreeNode:
  2. def __init__(self, x):
  3. self.val = x
  4. self.left = None
  5. self.right = None
  6. def __str__(self):
  7. return "\nValue: " + str(self.val) + "\nLeft:" + str(self.left) + "\nRight:" + str(self.right)
  8. class Solution:
  9. def bstFromPreorder(self, preorder):
  10. if preorder is None or len(preorder) == 0:
  11. return None
  12. elif len(preorder) == 1:
  13. return TreeNode(preorder[0])
  14. root = TreeNode(preorder[0])
  15. # now collect the nodes that are less than root and make a tree from them
  16. leftChildrenItems = list(filter(lambda x: x < preorder[0], preorder[1:]))
  17. rightChildrenItems = list(filter(lambda x: x > preorder[0], preorder[1:])) # don't need >= because items are distinct
  18. root.left = self.bstFromPreorder(leftChildrenItems)
  19. root.right = self.bstFromPreorder(rightChildrenItems)
  20. return root
  21. s = Solution()
  22. print("Expected: [4, 2]")
  23. print("Got:", s.bstFromPreorder([4, 2]))