daily log 10.06.20

2 minute read

Attempt 1, treating it like a Tree Node

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """

#       is val < root?
#           if left_node,
#               left_node becomes new root
#           else insert
#       is val > root?
#           if right_node,
#               right_node becomes new root
#           else insert

        new_root = root
        not_done = True
        while(not_done):
            if val < new_root:
                if new_root.left:
                    new_root = new_root.left
                else:
                    new_root.left = val
                    not_done = False

            if val > new_root:
                if new_root.right:
                    new_root = new_root.right
                else:
                    new_root.right = val
                    not_done = False


        return root


Attempt 2, treating it like an array


# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """

#       is val < root?
#           if left_node,
#               left_node becomes new root
#           else insert
#       is val > root?
#           if right_node,
#               right_node becomes new root
#           else insert

        def get_left(i):
            idx = (2*i)+1
            try:
                return root[idx]
            except:
                return None

        def get_right(i):
            idx = (2*i)+2
            try:
                return root[idx]
            except:
                return None

        new_root = root[0]
        not_done = True
        for i in range(len(root)):
            if val < new_root:
                left = get_left(i)
                if left:
                    new_root = left
                else:
                    root.push(val)
                    not_done = False

            if val > new_root:
                right = get_right(i)
                if right:
                    new_root = right
                else:
                    root.push(val)
                    not_done = False


        return root

Attempt 3 – nothing good here

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """

#       is val < root?
#           if left_node,
#               left_node becomes new root
#           else insert
#       is val > root?
#           if right_node,
#               right_node becomes new root
#           else insert

#         new_node = TreeNode(val=6)
#         print(new_node)
        new_root = root
        not_done = True
        while(not_done):
            if val < new_root.val:
                if new_root.left:
                    new_root = new_root.left
                else:
                    root.left = TreeNode(val= new_root.left)
                    not_done = False

            if val > new_root.val:
                if new_root.right:
                    new_root = new_root.right
                else:
                    root.right = TreeNode(val= new_root.right)
                    not_done = False


        return root
        newNode = TreeNode(val=val)

        if root is None:
            root = newNode
            return root

        current = root

        while(true):
            if val < current.val:
                if current.left == None:
                    current.left = newNode
                    return