(BST) Construct Binary Search Tree from Preorder Traversal
03 Jan 2021 | algorithm programming leetcodepreorder로 주어진 트리 배열이 있다. 주어진 배열을 가지고
BST(Binary Search Tree)를 만들어라.
이진 탐색트리란, 모든 루트보다 왼쪽에 있는 원소들은 루트보다 값이 작고, 오른쪽에 있는 원소들은 루트보다 값이 크다.
이 점을 사용하고 주어진 배열이 어차피 preorder이기 때문에 루트부터 depth가 커지며 아래로 탐색하는 모양이다.
따라서 하나씩 순회하며 맨 첫번째 값을 루트로 두고, 그다음 값이 루트보다 작은지 큰지를 이용하여 있어야 할 위치에 원소를 위치시킨다.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode makeBST(int elem, TreeNode node) {
if(node == null) {
TreeNode newNode = new TreeNode(elem);
return newNode;
}
if(node.val == elem) {
return node;
}
TreeNode left, right;
left = right = null;
if(node.val > elem) {
left = makeBST(elem, node.left);
} else {
right = makeBST(elem, node.right);
}
if(left == null) {
node.right = right;
} else {
node.left = left;
}
return node;
}
public TreeNode bstFromPreorder(int[] preorder) {
TreeNode root = new TreeNode(preorder[0]);
for(int i=0; i< preorder.length; i++) {
makeBST(preorder[i], root);
}
return root;
}
}