Skip to content

Commit 1d8a88d

Browse files
committed
Add search-in-a-binary-search-tree solution
1 parent d435aa5 commit 1d8a88d

File tree

3 files changed

+86
-1
lines changed

3 files changed

+86
-1
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace leetcode;
6+
7+
use leetcode\util\TreeNode;
8+
9+
class SearchInABinarySearchTree
10+
{
11+
public static function searchBST(?TreeNode $root, int $val): ?TreeNode
12+
{
13+
if (!$root) {
14+
return $root;
15+
}
16+
17+
if ($root->val > $val) {
18+
return self::searchBST($root->left, $val);
19+
} elseif ($root->val < $val) {
20+
return self::searchBST($root->right, $val);
21+
} else {
22+
return $root;
23+
}
24+
}
25+
26+
public static function searchBST2(?TreeNode $root, int $val): ?TreeNode
27+
{
28+
if (!$root) {
29+
return $root;
30+
}
31+
$curr = $root;
32+
while ($curr && $curr instanceof TreeNode) {
33+
if ($curr->val > $val) {
34+
$curr = $curr->left;
35+
} elseif ($curr->val < $val) {
36+
$curr = $curr->right;
37+
} else {
38+
return $curr;
39+
}
40+
}
41+
42+
return $curr;
43+
}
44+
}

src/leetcode/util/TreeNode.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static function dfsTreeValues(TreeNode $tree, array &$list): void
3030

3131
public static function bfsTreeValues(TreeNode $tree): array
3232
{
33-
$ans = $items = $queue = [];
33+
$ans = $queue = [];
3434
$queue = [$tree];
3535
while ($queue) {
3636
/** @var TreeNode $node */
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace leetcode\tests;
6+
7+
use PHPUnit\Framework\TestCase;
8+
use leetcode\SearchInABinarySearchTree;
9+
use leetcode\util\TreeNode;
10+
11+
class SearchInABinarySearchTreeTest extends TestCase
12+
{
13+
private array $items;
14+
15+
protected function setUp(): void
16+
{
17+
$t1 = new TreeNode(4);
18+
$t1->left = new TreeNode(2);
19+
$t1->right = new TreeNode(7);
20+
$t1->left->left = new TreeNode(1);
21+
$t1->left->right = new TreeNode(3);
22+
23+
$t2 = clone $t1;
24+
25+
$this->items = [
26+
[$t1, 2, [2, 1, 3]],
27+
[$t2, 5, []],
28+
];
29+
}
30+
31+
public function testSearchBST(): void
32+
{
33+
foreach ($this->items as $item) {
34+
$node = SearchInABinarySearchTree::searchBST($item[0], $item[1]);
35+
self::assertSame(
36+
$item[2],
37+
$node instanceof TreeNode ? TreeNode::bfsTreeValues($node) : []
38+
);
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)