From aef51cb613eacf30396bd2e545d9220386d22345 Mon Sep 17 00:00:00 2001 From: Gabriel Donnan <47415809+gabedonnan@users.noreply.github.com> Date: Fri, 17 Feb 2023 14:31:03 +0000 Subject: [PATCH] Create min-bintree-diff.py janky-ahh solution to find the minimum difference between nodes in a binary search tree, could be very easily optimised but im not gonna right now --- min-bintree-diff.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 min-bintree-diff.py diff --git a/min-bintree-diff.py b/min-bintree-diff.py new file mode 100644 index 0000000..aa24684 --- /dev/null +++ b/min-bintree-diff.py @@ -0,0 +1,25 @@ +# 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 +class Solution: + def minDiffInBST(self, root_node: Optional[TreeNode]) -> int: + + def search(root: Optional[TreeNode], prevs: List[int]) -> int: + if len(prevs) > 0: + prevdiff = min([abs(root.val - prev) for prev in prevs]) + else: + prevdiff = math.inf + #print(root.val, prevs, prevdiff) + if root.left == None and root.right == None: + return prevdiff + elif root.left == None and root.right != None: + return min([abs(root.val - root.right.val), search(root.right, prevs + [root.val]), prevdiff]) + elif root.right == None and root.left != None: + return min([abs(root.val - root.left.val), search(root.left, prevs + [root.val]), prevdiff]) + else: + return min([search(root.left, prevs + [root.val]), search(root.right, prevs + [root.val]), abs(root.val - root.left.val), abs(root.val - root.right.val), prevdiff]) + return search(root_node, []) +