Leetcode!
  • LeetCode!
  • My personal guide to Leetcode
  • Array
    • 11. Container With Most Water
    • 15. 3Sum
    • 219. Contains Duplicate II
    • 238. Product of Array Except Self
    • 245. Shortest Word Distance III
    • 392. Is Subsequence
    • 442. Find All Duplicates in an Array
    • 561. Array Partition I
    • 661. Image Smoother
    • 697. Degree of an Array
    • 723. Candy Crush
    • 832. Flipping an Image
  • Backtracking
    • 294. Flip Game II
    • 401. Binary Watch
    • 1079. Letter Tile Possibilities
  • Binary Search
    • 744. Find Smallest Letter Greater Than Target
    • 852. Peak Index in a Mountain Array
  • String
    • 6. ZigZag Conversion
    • 17. Letter Combinations of a Phone Number
    • 38. Count and Say
    • 521. Longest Uncommon Subsequence I
    • 544. Output Contest Matches
    • 937. Reorder Data in Log Files
  • Design
    • 251. Flatten 2D Vector
    • 281. Zigzag Iterator
  • Hash Table
    • 1. Two Sum
    • 508. Most Frequent Subtree Sum
    • 884. Uncommon Words from Two Sentences
    • 734. Sentence Similarity
  • Linked List
    • 2. Add Two Numbers
  • Unsorted
    • 917. Reverse Only Letters
  • Math
    • 43. Multiply Strings
    • 462. Minimum Moves to Equal Array Elements II
    • 553. Optimal Division
    • 800. Similar RGB Color
  • Greedy
    • 406. Queue Reconstruction by Height
    • 861. Score After Flipping Matrix
  • Tree
    • 701. Insert into a Binary Search Tree
    • 897. Increasing Order Search Tree
  • Divide and Conquer
    • 53. Maximum Subarray
  • Dynamic Programming
    • 62. Unique Paths
    • 63. Unique Paths II
    • 64. Minimum Path Sum
    • 120. Triangle
    • 198. House Robber
    • 213. House Robber II
    • 303. Range Sum Query - Immutable
    • 518. Coin Change 2
    • 750. Number Of Corner Rectangles
    • 337. House Robber III
  • Depth first search
    • 841. Keys and Rooms
  • Trie
    • 677. Map Sum Pairs
  • Two pointer
    • 42. Trapping Rain Water
Powered by GitBook
On this page
  • Approach 1: Recursively insert into left or right parts
  • Approach 2: Iterative Approach 1
  1. Tree

701. Insert into a Binary Search Tree

Approach 1: Recursively insert into left or right parts

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def insertIntoBST(self, root, val):
        """
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """
        if root == None: return TreeNode(val)
        if val > root.val:
            root.right = self.insertIntoBST(root.right, val)
        else:
            root.left = self.insertIntoBST(root.left, val)
        return root

Time Complexity: O(logN) assuming balanced BST (Otherwise O(N) worst case where N is number of nodes)

Space Complexity: O(M) height of the stack (recursive call)

Approach 2: Iterative Approach 1

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def insertIntoBST(self, root, val):
        """
        https://leetcode.com/problems/insert-into-a-binary-search-tree/description/
        :type root: TreeNode
        :type val: int
        :rtype: TreeNode
        """
        parser = root
        prevParser = root
        while parser:                   
            if val > parser.val:
                prevParser = parser
                parser = parser.right
            else:
                prevParser = parser
                parser = parser.left
        if val > prevParser.val:
            prevParser.right = TreeNode(val)
        else:
            prevParser.left = TreeNode(val)
        return root

We iterate through the tree and each time eliminate half the tree based on the value of the current node we are on. If the value to be inserted is greater than current node's value we move to the right tree and vice versa. By the time we finish iterating like this we reach the position where the node is supposed to inserted. We insert it in it's position using the TreeNode prevParser which stores the position of the parser one iteration behind i.e. the parent node

Time Complexity: O(logN) assuming balanced BST (Otherwise O(N) worst case where N is number of nodes)

Space Complexity: O(1)

Previous861. Score After Flipping MatrixNext897. Increasing Order Search Tree

Last updated 6 years ago