forked from YuriSpiridonov/LeetCode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
701.InsertintoaBinarySearchTree.py
78 lines (67 loc) · 2.23 KB
/
701.InsertintoaBinarySearchTree.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
"""
Given the root node of a binary search tree (BST) and a value to be inserted
into the tree, insert the value into the BST. Return the root node of the
BST after the insertion. It is guaranteed that the new value does not exist
in the original BST.
Note that there may exist multiple valid ways for the insertion, as long as
the tree remains a BST after insertion. You can return any of them.
For example,
Given the tree:
4
/ \
2 7
/ \
1 3
And the value to insert: 5
You can return this binary search tree:
4
/ \
2 7
/ \ /
1 3 5
This tree is also valid:
5
/ \
2 7
/ \
1 3
\
4
Constraints:
- The number of nodes in the given tree will be between 0 and 10^4.
- Each node will have a unique integer value from 0 to -10^8, inclusive.
- -10^8 <= val <= 10^8
- It's guaranteed that val does not exist in the original BST.
"""
#Difficulty: Medium
#35 / 35 test cases passed.
#Runtime: 144 ms
#Memory Usage: 15.9 MB
#Runtime: 144 ms, faster than 64.95% of Python3 online submissions for Insert into a Binary Search Tree.
#Memory Usage: 15.9 MB, less than 73.19% of Python3 online submissions for Insert into a Binary Search Tree.
# 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 insertIntoBST(self, root: TreeNode, val: int) -> TreeNode:
current = root
while True:
if not root:
root = TreeNode(val)
break
if current.val > val:
if current.left:
current = current.left
else:
current.left = TreeNode(val)
break
if current.val < val:
if current.right:
current = current.right
else:
current.right = TreeNode(val)
break
return root