LeetCode 0919. Complete Binary Tree Inserter Solution in Java, C++, Python & More | Explanation + Code

CoderIndeed
0
0919. Complete Binary Tree Inserter

Description

A complete binary tree is a binary tree in which every level, except possibly the last, is completely filled, and all nodes are as far left as possible.

Design an algorithm to insert a new node to a complete binary tree keeping it complete after the insertion.

Implement the CBTInserter class:

  • CBTInserter(TreeNode root) Initializes the data structure with the root of the complete binary tree.
  • int insert(int v) Inserts a TreeNode into the tree with value Node.val == val so that the tree remains complete, and returns the value of the parent of the inserted TreeNode.
  • TreeNode get_root() Returns the root node of the tree.

 

Example 1:

Input
["CBTInserter", "insert", "insert", "get_root"]
[[[1, 2]], [3], [4], []]
Output
[null, 1, 2, [1, 2, 3, 4]]

Explanation CBTInserter cBTInserter = new CBTInserter([1, 2]); cBTInserter.insert(3); // return 1 cBTInserter.insert(4); // return 2 cBTInserter.get_root(); // return [1, 2, 3, 4]

 

Constraints:

  • The number of nodes in the tree will be in the range [1, 1000].
  • 0 <= Node.val <= 5000
  • root is a complete binary tree.
  • 0 <= val <= 5000
  • At most 104 calls will be made to insert and get_root.

Solutions

Solution 1: BFS

We can use an array tree to store all nodes of the complete binary tree. During initialization, we use a queue q to perform level-order traversal of the given tree and store all nodes into the array tree.

When inserting a node, we can find the parent node p of the new node through the array tree. Then we create a new node node, insert it into the array tree, and make node as the left child or right child of p. Finally, we return the value of p.

When getting the root node, we directly return the first element of the array tree.

In terms of time complexity, it takes O(n) time for initialization, and the time complexity for inserting a node and getting the root node are both O(1). The space complexity is O(n), where n is the number of nodes in the tree.

PythonJavaC++GoTypeScriptJavaScript
# 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 CBTInserter: def __init__(self, root: Optional[TreeNode]): self.tree = [] q = deque([root]) while q: for _ in range(len(q)): node = q.popleft() self.tree.append(node) if node.left: q.append(node.left) if node.right: q.append(node.right) def insert(self, val: int) -> int: p = self.tree[(len(self.tree) - 1) // 2] node = TreeNode(val) self.tree.append(node) if p.left is None: p.left = node else: p.right = node return p.val def get_root(self) -> Optional[TreeNode]: return self.tree[0] # Your CBTInserter object will be instantiated and called as such: # obj = CBTInserter(root) # param_1 = obj.insert(val) # param_2 = obj.get_root()(code-box)

Post a Comment

0Comments

Post a Comment (0)

#buttons=(Accept !) #days=(20)

Our website uses cookies to enhance your experience. Check Now
Accept !