about summary refs log tree commit diff
path: root/scratch/facebook/bst-checker.py
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-11-12T14·37+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-11-12T14·37+0000
commitaa66d9b83d5793bdbb7fe28368e0642f7c3dceac (patch)
treea0e6ad240fe1cdfd2fcdba7266931beea9fbe0d6 /scratch/facebook/bst-checker.py
parentd2d772e43e0d4fb1bfaaa58d7de0c9e2cc274a25 (diff)
Add coding exercises for Facebook interviews
Add attempts at solving coding problems to Briefcase.
Diffstat (limited to 'scratch/facebook/bst-checker.py')
-rw-r--r--scratch/facebook/bst-checker.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/scratch/facebook/bst-checker.py b/scratch/facebook/bst-checker.py
new file mode 100644
index 000000000000..50edeeaa1997
--- /dev/null
+++ b/scratch/facebook/bst-checker.py
@@ -0,0 +1,79 @@
+from collections import deque
+
+class Node(object):
+    def __init__(self, value, left=None, right=None):
+        self.value = value
+        self.left = left
+        self.right = right
+
+    def insert_left(self, value):
+        self.left = Node(value)
+        return self.left
+
+    def insert_right(self, value):
+        self.right = Node(value)
+        return self.right
+
+    def min(self):
+        xs = deque()
+        result = float('inf')
+        xs.append(self)
+        while xs:
+            node = xs.popleft()
+            result = min(result, node.value)
+            if node.left:
+                xs.append(node.left)
+            if node.right:
+                xs.append(node.right)
+        return result
+
+    def max(self):
+        xs = deque()
+        result = float('-inf')
+        xs.append(self)
+        while xs:
+            node = xs.popleft()
+            result = max(result, node.value)
+            if node.left:
+                xs.append(node.left)
+            if node.right:
+                xs.append(node.right)
+        return result
+
+    def is_bst(self):
+        result = True
+        if self.left:
+            result = result and self.left.max() < self.value
+        if self.right:
+            result = result and self.right.min() > self.value
+        return result
+
+
+x = Node(
+    50,
+    Node(
+        17,
+        Node(
+            12,
+            Node(9),
+            Node(14),
+        ),
+        Node(
+            23,
+            Node(19),
+        ),
+    ),
+    Node(
+        72,
+        Node(
+            54,
+            None,
+            Node(67)
+        ),
+        Node(76),
+    ),
+)
+
+
+assert x.is_bst()
+print("Success!")