12345678910111213141516171819202122232425262728293031 |
- class TreeNode:
- def __init__(self, x):
- self.val = x
- self.left = None
- self.right = None
-
- def __str__(self):
- return "\nValue: " + str(self.val) + "\nLeft:" + str(self.left) + "\nRight:" + str(self.right)
-
- class Solution:
- def bstFromPreorder(self, preorder):
-
- if preorder is None or len(preorder) == 0:
- return None
- elif len(preorder) == 1:
- return TreeNode(preorder[0])
-
- root = TreeNode(preorder[0])
-
- # now collect the nodes that are less than root and make a tree from them
- leftChildrenItems = list(filter(lambda x: x < preorder[0], preorder[1:]))
- rightChildrenItems = list(filter(lambda x: x > preorder[0], preorder[1:])) # don't need >= because items are distinct
-
- root.left = self.bstFromPreorder(leftChildrenItems)
- root.right = self.bstFromPreorder(rightChildrenItems)
-
- return root
-
- s = Solution()
- print("Expected: [4, 2]")
- print("Got:", s.bstFromPreorder([4, 2]))
|