Node insert(Node root, int val) {
if (root == null) return new Node(val);
if (val < root.val) root.left = insert(root.left, val);
else if (val > root.val) root.right = insert(root.right, val);
return root;
}
boolean search(Node root, int val) {
if (root == null) return false;
if (root.val == val) return true;
return val < root.val ? search(root.left, val) : search(root.right, val);
}
void inorder(Node root, List<Integer> result) {
if (root == null) return;
inorder(root.left, result);
result.add(root.val);
inorder(root.right, result);
}