diff --git a/0173_binary-search-tree-iterator/README.md b/0173_binary-search-tree-iterator/README.md new file mode 100644 index 0000000..8eaab5e --- /dev/null +++ b/0173_binary-search-tree-iterator/README.md @@ -0,0 +1,42 @@ +Implement the `BSTIterator` class that represents an iterator over the **[in-order traversal](https://en.wikipedia.org/wiki/Tree_traversal#In-order_(LNR))** of a binary search tree (BST): + +* `BSTIterator(TreeNode root)` Initializes an object of the `BSTIterator` class. The `root` of the BST is given as part of the constructor. The pointer should be initialized to a non-existent number smaller than any element in the BST. +* `boolean hasNext()` Returns `true` if there exists a number in the traversal to the right of the pointer, otherwise returns `false`. +* `int next()` Moves the pointer to the right, then returns the number at the pointer. + +Notice that by initializing the pointer to a non-existent smallest number, the first call to `next()` will return the smallest element in the BST. + +You may assume that `next()` calls will always be valid. That is, there will be at least a next number in the in-order traversal when `next()` is called. + +**Example 1:** + +![](https://assets.leetcode.com/uploads/2018/12/25/bst-tree.png) + + Input + ["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"] + [[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []] + Output + [null, 3, 7, true, 9, true, 15, true, 20, false] + + Explanation + BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]); + bSTIterator.next(); // return 3 + bSTIterator.next(); // return 7 + bSTIterator.hasNext(); // return True + bSTIterator.next(); // return 9 + bSTIterator.hasNext(); // return True + bSTIterator.next(); // return 15 + bSTIterator.hasNext(); // return True + bSTIterator.next(); // return 20 + bSTIterator.hasNext(); // return False + + +**Constraints:** + +* The number of nodes in the tree is in the range `[1, 105]`. +* `0 <= Node.val <= 106` +* At most `105` calls will be made to `hasNext`, and `next`. + +**Follow up:** + +* Could you implement `next()` and `hasNext()` to run in average `O(1)` time and useĀ `O(h)` memory, where `h` is the height of the tree? \ No newline at end of file diff --git a/0173_binary-search-tree-iterator/python3/extra_space_precompute.py b/0173_binary-search-tree-iterator/python3/extra_space_precompute.py new file mode 100644 index 0000000..b12e3ef --- /dev/null +++ b/0173_binary-search-tree-iterator/python3/extra_space_precompute.py @@ -0,0 +1,33 @@ +# Time: O(N) +# Space: O(N) + +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +from collections import deque + +class BSTIterator: + items = None + + def __init__(self, root: Optional[TreeNode]): + def inorder(node): + return inorder(node.left) + [node.val] + inorder(node.right) if node else [] + + # In-order traversal of a BST gives us values in + # sorted order + self.items = deque(inorder(root)) + + def next(self) -> int: + return self.items.popleft() + + def hasNext(self) -> bool: + return len(self.items) > 0 + + +# Your BSTIterator object will be instantiated and called as such: +# obj = BSTIterator(root) +# param_1 = obj.next() +# param_2 = obj.hasNext() diff --git a/0173_binary-search-tree-iterator/python3/solution.py b/0173_binary-search-tree-iterator/python3/solution.py new file mode 100644 index 0000000..e69de29