Test Failed
Push — master ( 1b060a...d51468 )
by Jinyun
02:25
created

DeleteNodeInABinarySearchTree::deleteNode()   A

Complexity

Conditions 6
Paths 6

Size

Total Lines 22
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 15
c 1
b 0
f 0
dl 0
loc 22
rs 9.2222
cc 6
nc 6
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace leetcode;
6
7
use leetcode\util\TreeNode;
8
9
class DeleteNodeInABinarySearchTree
10
{
11
    public static function deleteNode(?TreeNode $root, int $key): ?TreeNode
12
    {
13
        if (!$root) {
14
            return $root;
15
        }
16
        if ($root->val > $key) {
17
            $root->left = self::deleteNode($root->left, $key);
18
        } elseif ($root->val < $key) {
19
            $root->right = self::deleteNode($root->right, $key);
20
        } else {
21
            if (!$root->left) {
22
                return $root->right ?? new TreeNode();
23
            }
24
            if (!$root->right) {
25
                return $root->left ?? new TreeNode();
26
            }
27
            $node = self::findMinNode($root->right);
28
            $root->val = $node->val;
29
            $root->right = self::deleteNode($root->right, $node->val);
30
        }
31
32
        return $root;
33
    }
34
35
    private static function findMinNode(?TreeNode $node): TreeNode
36
    {
37
        while (!$node) {
38
            $node = $node->left;
39
        }
40
        return $node;
41
    }
42
}
43