diff --git a/src/SearchInaBinarySearchTree700.java b/src/SearchInaBinarySearchTree700.java deleted file mode 100644 index 21777d9..0000000 --- a/src/SearchInaBinarySearchTree700.java +++ /dev/null @@ -1,18 +0,0 @@ -public class SearchInaBinarySearchTree700 { - public TreeNode searchBST(TreeNode root, int val) { - if (root == null) { - return null; - } - if (root.val == val) { - return root; - } - if (root.val > val) { - return this.searchBST(root.left, val); - } - return this.searchBST(root.right, val); - } - - public static void main(String[] args) { - System.out.println(new SearchInaBinarySearchTree700().searchBST(null, 1)); // null - } -} diff --git a/src/main/java/com/leetcode/easy/SearchInABinarySearchTree700.java b/src/main/java/com/leetcode/easy/SearchInABinarySearchTree700.java new file mode 100644 index 0000000..50391ce --- /dev/null +++ b/src/main/java/com/leetcode/easy/SearchInABinarySearchTree700.java @@ -0,0 +1,24 @@ +// Tags: Tree, DFS +package com.leetcode.easy; + +import com.leetcode.datastructure.TreeNode; + +public class SearchInABinarySearchTree700 { + /** + * Time complexity: O(H), where H is a tree height. + * That results in O(logN) in the average case, and O(N) in the worst case. + *
+ * Space complexity: O(H) to keep the recursion stack, + * i.e. O(logN) in the average case, and O(N) in the worst case. + */ + public TreeNode searchBST(TreeNode root, int val) { + if (root == null || root.val == val) { + return root; + } + if (root.val > val) { + return this.searchBST(root.left, val); + } else { + return this.searchBST(root.right, val); + } + } +} diff --git a/src/test/java/com/leetcode/easy/SearchInABinarySearchTree700Test.java b/src/test/java/com/leetcode/easy/SearchInABinarySearchTree700Test.java new file mode 100644 index 0000000..cd53db6 --- /dev/null +++ b/src/test/java/com/leetcode/easy/SearchInABinarySearchTree700Test.java @@ -0,0 +1,45 @@ +package com.leetcode.easy; + +import com.leetcode.datastructure.TreeNode; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class SearchInABinarySearchTree700Test { + private SearchInABinarySearchTree700 solution; + + @BeforeEach + void setUp() { + solution = new SearchInABinarySearchTree700(); + } + + @Test + void testSearchBST_Example1() { + TreeNode root = new TreeNode(4); + root.left = new TreeNode(2); + root.right = new TreeNode(7); + root.left.left = new TreeNode(1); + root.left.right = new TreeNode(3); + int val = 2; + + TreeNode result = solution.searchBST(root, val); + + assertEquals(result, root.left); + } + + @Test + void testSearchBST_Example2() { + TreeNode root = new TreeNode(4); + root.left = new TreeNode(2); + root.right = new TreeNode(7); + root.left.left = new TreeNode(1); + root.left.right = new TreeNode(3); + int val = 5; + + TreeNode result = solution.searchBST(root, val); + + assertNull(result); + } +}