File tree Expand file tree Collapse file tree 11 files changed +255
-46
lines changed Expand file tree Collapse file tree 11 files changed +255
-46
lines changed Original file line number Diff line number Diff line change 28
28
* [ Bstree] ( ./DataStructures/BinarySearchTree/BSTree.php )
29
29
* [ Duplicatekeyexception] ( ./DataStructures/BinarySearchTree/DuplicateKeyException.php )
30
30
* CompareBinaryTree
31
- * [ CompareBinaryTree] ( ./DataStructures/CompareBinaryTree/CompareBinaryTree .php )
32
- * [ Node ] ( ./DataStructures/CompareBinaryTree/Node .php )
31
+ * [ CompareBinaryTree] ( ./DataStructures/CompareBinaryTree.php )
32
+ * [ BinaryTreeNode ] ( ./DataStructures/BinaryTreeNode .php )
33
33
* Disjointsets
34
34
* [ Disjointset] ( ./DataStructures/DisjointSets/DisjointSet.php )
35
35
* [ Disjointsetnode] ( ./DataStructures/DisjointSets/DisjointSetNode.php )
36
36
* [ Doublylinkedlist] ( ./DataStructures/DoublyLinkedList.php )
37
+ * InvertBinaryTree
38
+ * [ InvertBinaryTree] ( ./DataStructures/InvertBinaryTree.php )
39
+ * [ BinaryTree] ( ./DataStructures/BinaryTree.php )
37
40
* [ Node] ( ./DataStructures/Node.php )
38
41
* [ Queue] ( ./DataStructures/Queue.php )
42
+ * ReverseLinkedList
43
+ * [ ReverseLinkedList.php] ( DataStructures/ReverseLinkedList.php )
44
+ * [ LinkedListItem.php] ( DataStructures/LinkedListItem.php )
39
45
* Segmenttree
40
46
* [ Segmenttree] ( ./DataStructures/SegmentTree/SegmentTree.php )
41
47
* [ Segmenttreenode] ( ./DataStructures/SegmentTree/SegmentTreeNode.php )
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ class BinaryTree {
4
+ private ?BinaryTree $ left = null ;
5
+ private ?BinaryTree $ right = null ;
6
+ private $ value ;
7
+
8
+ public function setLeft (?BinaryTree $ left )
9
+ {
10
+ $ this ->left = $ left ;
11
+ return $ this ;
12
+ }
13
+
14
+ public function getLeft (): ?BinaryTree
15
+ {
16
+ return $ this ->left ;
17
+ }
18
+
19
+ public function setRight (?BinaryTree $ right )
20
+ {
21
+ $ this ->right = $ right ;
22
+ return $ this ;
23
+ }
24
+
25
+ public function getRight (): ?BinaryTree
26
+ {
27
+ return $ this ->right ;
28
+ }
29
+
30
+ public function setValue ($ value )
31
+ {
32
+ $ this ->value = $ value ;
33
+ return $ this ;
34
+ }
35
+
36
+ public function getValue ()
37
+ {
38
+ return $ this ->value ;
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+ namespace DataStructures ;
3
+
4
+ class BinaryTreeNode
5
+ {
6
+ public function __construct ($ value , ?BinaryTreeNode $ left = null , BinaryTreeNode $ right = null )
7
+ {
8
+ $ this ->value = $ value ;
9
+ $ this ->left = $ left ;
10
+ $ this ->right = $ right ;
11
+ }
12
+
13
+ public $ value ;
14
+ public ?BinaryTreeNode $ left ;
15
+ public ?BinaryTreeNode $ right ;
16
+ }
Original file line number Diff line number Diff line change 1
1
<?php
2
- namespace DataStructures \CompareBinaryTree ;
2
+
3
+ namespace DataStructures ;
3
4
4
5
/**
5
6
* Recurrent comparison of binary trees based on comparison of left and right branches
@@ -11,11 +12,11 @@ class CompareBinaryTree
11
12
{
12
13
/**
13
14
* compare two binary trees
14
- * @param Node |null $a
15
- * @param Node |null $b
15
+ * @param BinaryTreeNode |null $a
16
+ * @param BinaryTreeNode |null $b
16
17
* @return bool
17
18
*/
18
- public function areTreesEqual (?Node $ a , ?Node $ b ): bool
19
+ public function areTreesEqual (?BinaryTreeNode $ a , ?BinaryTreeNode $ b ): bool
19
20
{
20
21
if (! $ a && $ b || $ a && ! $ b ) {
21
22
return false ;
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace DataStructures ;
4
+
5
+ use BinaryTree ;
6
+
7
+ /**
8
+ * Recurrent algorithm to invert binary tree (mirror)
9
+ * (https://medium.com/@kvrware/inverting-binary-tree-b0ff3a5cb0df).
10
+ *
11
+ * @author Michał Żarnecki https://github.com/rzarno
12
+ */
13
+ class InvertBinaryTree
14
+ {
15
+ public function invert (?BinaryTree $ b ): void
16
+ {
17
+ if (! $ b ) {
18
+ return ;
19
+ }
20
+ $ tmp = $ b ->getLeft ();
21
+ $ b ->setLeft ($ b ->getRight ());
22
+ $ b ->setRight ($ tmp );
23
+ $ this ->invert ($ b ->getLeft ());
24
+ $ this ->invert ($ b ->getRight ());
25
+ }
26
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ class LinkedListItem {
4
+ private ?LinkedListItem $ next = null ;
5
+ private ?LinkedListItem $ prev = null ;
6
+ private $ value ;
7
+
8
+ public function setNext (?LinkedListItem $ next )
9
+ {
10
+ $ this ->next = $ next ;
11
+ return $ this ;
12
+ }
13
+
14
+ public function getNext (): ?LinkedListItem
15
+ {
16
+ return $ this ->next ;
17
+ }
18
+
19
+ public function setPrev (?LinkedListItem $ prev )
20
+ {
21
+ $ this ->prev = $ prev ;
22
+ return $ this ;
23
+ }
24
+
25
+ public function getPrev (): ?LinkedListItem
26
+ {
27
+ return $ this ->prev ;
28
+ }
29
+
30
+ public function setValue ($ value )
31
+ {
32
+ $ this ->value = $ value ;
33
+ return $ this ;
34
+ }
35
+
36
+ public function getValue ()
37
+ {
38
+ return $ this ->value ;
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ /**
4
+ * Reverse linked list
5
+ * (https://en.wikipedia.org/wiki/Linked_list).
6
+ *
7
+ * @author Michał Żarnecki https://github.com/rzarno
8
+ */
9
+ class ReverseLinkedList
10
+ {
11
+ public function reverse (LinkedListItem $ item ): LinkedListItem
12
+ {
13
+ $ next = $ item ->getNext ();
14
+ $ item ->setNext (null );
15
+ while (true ) {
16
+ $ item ->setPrev ($ next );
17
+ if (! $ next ) {
18
+ return $ item ;
19
+ }
20
+ $ nextNext = $ next ->getNext ();
21
+ $ next ->setNext ($ item );
22
+ $ item = $ next ;
23
+ $ next = $ nextNext ;
24
+ }
25
+ }
26
+ }
Original file line number Diff line number Diff line change 3
3
namespace DataStructures ;
4
4
5
5
require_once __DIR__ . '/../../vendor/autoload.php ' ;
6
- require_once __DIR__ . '/../../DataStructures/CompareBinaryTree/Node .php ' ;
7
- require_once __DIR__ . '/../../DataStructures/CompareBinaryTree/CompareBinaryTree .php ' ;
6
+ require_once __DIR__ . '/../../DataStructures/BinaryTreeNode .php ' ;
7
+ require_once __DIR__ . '/../../DataStructures/CompareBinaryTree.php ' ;
8
8
9
- use DataStructures \CompareBinaryTree \CompareBinaryTree ;
10
- use DataStructures \CompareBinaryTree \Node ;
11
9
use PHPUnit \Framework \TestCase ;
12
10
13
11
class CompareBinaryTreeTest extends TestCase
14
12
{
15
13
public function testBinaryTreesAreEqualWhenAreEqualInReality ()
16
14
{
17
- $ tree1 = new Node (
15
+ $ tree1 = new BinaryTreeNode (
18
16
'A ' ,
19
- new Node (
17
+ new BinaryTreeNode (
20
18
'B ' ,
21
- new Node (
19
+ new BinaryTreeNode (
22
20
'D '
23
21
),
24
- new Node (
22
+ new BinaryTreeNode (
25
23
'E ' ,
26
24
null ,
27
- new Node (
25
+ new BinaryTreeNode (
28
26
'F '
29
27
)
30
28
)
31
29
),
32
- new Node (
30
+ new BinaryTreeNode (
33
31
'C ' ,
34
- new Node ('G ' )
32
+ new BinaryTreeNode ('G ' )
35
33
)
36
34
);
37
35
@@ -44,43 +42,43 @@ public function testBinaryTreesAreEqualWhenAreEqualInReality()
44
42
public function testBinaryTreesAreNotEqualWhenAreNotEqualInReality ()
45
43
{
46
44
47
- $ tree1 = new Node (
45
+ $ tree1 = new BinaryTreeNode (
48
46
'A ' ,
49
- new Node (
47
+ new BinaryTreeNode (
50
48
'B ' ,
51
- new Node (
49
+ new BinaryTreeNode (
52
50
'F '
53
51
),
54
- new Node (
52
+ new BinaryTreeNode (
55
53
'E ' ,
56
54
null ,
57
- new Node (
55
+ new BinaryTreeNode (
58
56
'D '
59
57
)
60
58
)
61
59
),
62
- new Node (
60
+ new BinaryTreeNode (
63
61
'C ' ,
64
- new Node ('G ' )
62
+ new BinaryTreeNode ('G ' )
65
63
)
66
64
);
67
65
68
- $ tree2 = new Node (
66
+ $ tree2 = new BinaryTreeNode (
69
67
'A ' ,
70
- new Node (
68
+ new BinaryTreeNode (
71
69
'B ' ,
72
- new Node (
70
+ new BinaryTreeNode (
73
71
'F '
74
72
),
75
- new Node (
73
+ new BinaryTreeNode (
76
74
'E ' ,
77
75
null ,
78
- new Node (
76
+ new BinaryTreeNode (
79
77
'D '
80
78
)
81
79
)
82
80
),
83
- new Node (
81
+ new BinaryTreeNode (
84
82
'C '
85
83
)
86
84
);
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ namespace DataStructures ;
4
+
5
+ require_once __DIR__ . '/../../vendor/autoload.php ' ;
6
+ require_once __DIR__ . '/../../DataStructures/BinaryTree.php ' ;
7
+ require_once __DIR__ . '/../../DataStructures/InvertBinaryTree.php ' ;
8
+
9
+ use BinaryTree ;
10
+ use PHPUnit \Framework \TestCase ;
11
+
12
+ class InvertBinaryTreeTest extends TestCase
13
+ {
14
+ public function testInvertBinaryTree ()
15
+ {
16
+ $ b = (new BinaryTree ())->setValue (1 );
17
+ $ bl = (new BinaryTree ())->setValue (3 );
18
+ $ b ->setLeft ($ bl );
19
+ $ br = (new BinaryTree ())->setValue (2 );
20
+ $ b ->setRight ($ br );
21
+ $ br ->setLeft ((new BinaryTree ())->setValue (4 ));
22
+ $ br ->setRight ((new BinaryTree ())->setValue (5 ));
23
+
24
+ $ expected = (new BinaryTree ())->setValue (1 );
25
+ $ expectedBr = (new BinaryTree ())->setValue (3 );
26
+ $ expected ->setRight ($ expectedBr );
27
+ $ expectedBl = (new BinaryTree ())->setValue (2 );
28
+ $ expected ->setLeft ($ expectedBl );
29
+ $ expectedBl ->setRight ((new BinaryTree ())->setValue (4 ));
30
+ $ expectedBl ->setLeft ((new BinaryTree ())->setValue (5 ));
31
+
32
+ (new InvertBinaryTree ())->invert ($ b );
33
+
34
+ $ this ->assertEquals ($ expected , $ b );
35
+ }
36
+ }
You can’t perform that action at this time.
0 commit comments