Leetcode Java Construct Binary Search Tree from Preorder Traversal
업데이트:
문제
코드
/**
* 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 bstFromPreorder(int[] preorder) {
return this.bst(preorder, Integer.MAX_VALUE, new int[] { 0 });
}
private TreeNode bst(int[] preorder, int bound, int[] i) {
if (i[0] == preorder.length || bound < preorder[i[0]]) {
return null;
}
TreeNode root = new TreeNode(preorder[i[0]++]);
root.left = this.bst(preorder, root.val, i);
root.right = this.bst(preorder, bound, i);
return root;
}
}
결과
설명
-
preorder를 이용하여 Pre-Order의 TreeNode를 완성하는 문제이다.
-
BST로 TreeNode를 완성할 bstFromPreorder(int[] preorder, int bound, int[] i) 메서드를 수행하여 만들어진 TreeNode를 주어진 문제의 결과로 반환한다.
- i[0]이 preorder의 길이와 동일하거나 bound가 preorder[i[0]] 값보다 작은 경우, 노드를 만들 수 없으므로 null을 반환한다.
- root에 preorder[i[0]] 값을 가진 TreeNode를 만들어주고 i[0] 값을 증가시킨다.
- root의 left TreeNode 위치에 root의 val 값을 이용한 재귀 호출을 수행한 결과를 넣어준다.
- root의 right TreeNode 위치에 bound 값을 이용한 재귀 호출을 수행한 결과를 넣어준다.
- 수행이 완료되면 root를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기