701. Insert into a Binary Search Tree #
Problem #
You are given the root node of a binary search tree (BST) and a value to insert into the tree. Return the root node of the BST after the insertion. It is guaranteed that the new value does not exist in the original BST.
Notice 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.
Example 1:

Input: root = [4,2,7,1,3], val = 5
Output: [4,2,7,1,3,5]
Explanation: Another accepted tree is:

Example 2:
Input: root = [40,20,60,10,30,50,70], val = 25
Output: [40,20,60,10,30,50,70,null,null,25]
Example 3:
Input: root = [4,2,7,1,3,null,null,null,null,null,null], val = 5
Output: [4,2,7,1,3,5]
Constraints:
- The number of nodes in the tree will be in the range
[0, 104]. 108 <= Node.val <= 108- All the values
Node.valare unique. 108 <= val <= 108- It’s guaranteed that
valdoes not exist in the original BST.
Problem Summary #
Given the root node of a binary search tree (BST) and a value to insert into the tree, insert the value into the binary search tree. Return the root node of the BST after insertion. The input data guarantees that the new value is different from the value of any node in the original BST. Note that there may be multiple valid insertion methods, as long as the tree remains a binary search tree after insertion. You can return any valid result.
Solution Approach #
- Easy problem. There are multiple ways to insert a node; here the author chooses a simple one. Traverse the binary tree starting from the root. If the current node’s value is smaller than the value of the node to be inserted, traverse to the right; if the current node’s value is greater than the value of the node to be inserted, traverse to the left. Finally, the null node reached during traversal is the place to insert.
Code #
package leetcode
import "github.com/halfrost/leetcode-go/structures"
// TreeNode define
type TreeNode = structures.TreeNode
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func insert(n *TreeNode, val int) *TreeNode {
if n == nil {
return &TreeNode{Val: val}
}
if n.Val < val {
n.Right = insert(n.Right, val)
} else {
n.Left = insert(n.Left, val)
}
return n
}
func insertIntoBST(root *TreeNode, val int) *TreeNode {
return insert(root, val)
}