Skip to content

Commit f6080d3

Browse files
committed
B
1 parent 51f530f commit f6080d3

File tree

3 files changed

+99
-29
lines changed

3 files changed

+99
-29
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
{
2+
"testCase1": {
3+
"expectedResult": [[9],[3,15],[20],[7]],
4+
"input": {
5+
"tree": {
6+
"nodes": [
7+
{"id": "1", "left": "2", "right": "3", "value": 3},
8+
{"id": "2", "left": null, "right": null, "value": 9},
9+
{"id": "3", "left": "4", "right": "5", "value": 20},
10+
{"id": "4", "left": null, "right": null, "value": 15},
11+
{"id": "5", "left": null, "right": null, "value": 7}
12+
],
13+
"root": "1"
14+
}
15+
}
16+
},
17+
"testCase2": {
18+
"expectedResult": [[4],[9],[3,0,1],[8],[7]],
19+
"input": {
20+
"tree": {
21+
"nodes": [
22+
{"id": "1", "left": "2", "right": "3", "value": 3},
23+
{"id": "2", "left": "4", "right": "5", "value": 9},
24+
{"id": "3", "left": "6", "right": "7", "value": 8},
25+
{"id": "4", "left": null, "right": null, "value": 4},
26+
{"id": "5", "left": null, "right": null, "value": 0},
27+
{"id": "6", "left": null, "right": null, "value": 1},
28+
{"id": "7", "left": null, "right": null, "value": 7}
29+
],
30+
"root": "1"
31+
}
32+
}
33+
},
34+
"testCase3": {
35+
"expectedResult": [[4],[2,7,8],[1,5,6,10,11,10],[3,9]],
36+
"input": {
37+
"tree": {
38+
"nodes": [
39+
{"id": "1", "left": "2", "right": "3", "value": 1},
40+
{"id": "2", "left": "4", "right": "5", "value": 2},
41+
{"id": "3", "left": "6", "right": null, "value": 3},
42+
{"id": "4", "left": null, "right": "7", "value": 4},
43+
{"id": "5", "left": "8", "right": null, "value": 5},
44+
{"id": "6", "left": null, "right": "9", "value": 6},
45+
{"id": "7", "left": null, "right": "10", "value": 7},
46+
{"id": "8", "left": null, "right": "11", "value": 8},
47+
{"id": "9", "left": "12", "right": null, "value": 9},
48+
{"id": "10", "left": null, "right": null, "value": 10},
49+
{"id": "11", "left": null, "right": null, "value": 11},
50+
{"id": "12", "left": null, "right": null, "value": 10}
51+
],
52+
"root": "1"
53+
}
54+
}
55+
}
56+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Hakam\LeetCodePhp\Tests\Tree;
4+
5+
use Hakam\LeetCodePhp\Tests\Helper\MainTest;
6+
use Hakam\LeetCodePhp\Tests\Helper\TreeHelperTrait;
7+
use Hakam\LeetCodePhp\Tree\BinaryTreeVerticalOrderTraversal;
8+
9+
class BinaryTreeVerticalOrderTraversalTest extends MainTest
10+
{
11+
use TreeHelperTrait;
12+
/**
13+
* @dataProvider provideData
14+
*/
15+
public function testWithDataList($expectedResult, $inputData): void
16+
{
17+
$tree = $this->createBinaryTree($inputData);
18+
$verticalOrder = new BinaryTreeVerticalOrderTraversal();
19+
$result = $verticalOrder->verticalOrder($tree);
20+
while (count($expectedResult) !== 0 )
21+
{
22+
$value = array_diff(array_shift($expectedResult),array_shift($result));
23+
self::assertEmpty($value);
24+
}
25+
}
26+
}

Tree/BinaryTreeVerticalOrderTraversal.php

Lines changed: 17 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,41 +9,29 @@ class BinaryTreeVerticalOrderTraversal
99
* @return Integer[][]
1010
*/
1111
private array $order = [];
12+
private array $queue = [];
1213

13-
function verticalOrder($root) {
14-
15-
$this->verticalNodeOrder($root,0,0);
16-
ksort($this->order);
17-
return $this->order;
18-
}
19-
20-
public function verticalNodeOrder($node, $index,$row): void
14+
public function verticalOrder($root): array
2115
{
22-
if($node === null)
23-
{
24-
return;
16+
if ($root === null) {
17+
return [];
2518
}
26-
if(isset($this->order[$index][$row]))
27-
{
28-
$newRow = $row+1;
29-
while(isset($this->order[$index][$newRow]))
30-
{
31-
++$newRow;
19+
20+
$this->queue [] = [$root, 0];
21+
22+
while (count($this->queue) !== 0) {
23+
[$node, $index] = array_shift($this->queue);
24+
$this->order[$index][] = $node->val;
25+
if ($node->left !== null) {
26+
$this->queue [] = [$node->left, $index - 1];
3227
}
33-
$this->order[$index][$newRow] = $node->val;
34-
}else {
35-
$this->order[$index][$row] = $node->val;
36-
}
37-
ksort($this->order[$index]);
3828

39-
if($node->left !== null)
40-
{
41-
$this->verticalNodeOrder($node->left,$index-1,$row+1);
42-
}
29+
if ($node->right !== null) {
30+
$this->queue [] = [$node->right, $index + 1];
4331

44-
if($node->right !== null)
45-
{
46-
$this->verticalNodeOrder($node->right,$index+1,$row+1);
32+
}
4733
}
34+
ksort($this->order);
35+
return $this->order;
4836
}
4937
}

0 commit comments

Comments
 (0)