본문 바로가기
Computer Science/알고리즘

leetcode 701) Insert into a Binary Search Tree

by eeeun:) 2022. 1. 12.
반응형

LV. Medium 🧐

https://leetcode.com/problems/insert-into-a-binary-search-tree/

 

Insert into a Binary Search Tree - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

문제

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.val are unique.
  • -108 <= val <= 108
  • It's guaranteed that val does not exist in the original BST.

 

문제 해결법

새로 생성할 val > 현재 node의 val -> 더 큰 값으로 이용해야 되기 때문에 현재 node를 node->right로 옮겨줌!

새로 생성할 val < 현재 node의 val -> 더 작은 값으로 이용해야 되기 때문에 현재 node를 node->left로 옮겨줌!

 

이렇게 옮기다가 자신의 자리를 찾으면(더 이상 이동할 수 있는 node가 없음) 새로운 node를 생성하여 nodelist에 붙여준다

 

해결 코드
class Solution {
public:
    TreeNode* insertIntoBST(TreeNode* root, int val) {
        TreeNode *temp = root;

		if (!temp) {
			TreeNode *newTreeNode = new TreeNode(val);
				root = newTreeNode;
				return root;
		}
		while (1) {
			if (temp->val > val && temp->left) {
				temp = temp->left;
			}
			else if (temp->val > val) {
				TreeNode *newTreeNode = new TreeNode(val);
				temp->left = newTreeNode;
				break ;
			}
			else if (temp->val < val && temp->right) {
				temp = temp->right;
			}
			else if (temp->val < val) {
				TreeNode *newTreeNode = new TreeNode(val);
				temp->right = newTreeNode;
				break ;
			}
		}
		return root;
    }
};

728x90

댓글