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