Skip to content

Commit 72824de

Browse files
committed
Problem #104
1 parent fa58397 commit 72824de

File tree

3 files changed

+125
-2
lines changed

3 files changed

+125
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
using LeetCodeNet.DataStructs;
2+
using LeetCodeNet.Easy.Trees;
3+
using System.Collections;
4+
5+
namespace LeetCodeNet.Tests.Easy.Trees
6+
{
7+
public class MaximumDepthofBinaryTree_104_test
8+
{
9+
[Theory, ClassData(typeof(MaximumDepthofBinaryTreeTestData))]
10+
public void CheckRecursive(TreeNode inputData, int expected)
11+
{
12+
var solver = new MaximumDepthofBinaryTree_104();
13+
var result = solver.MaxDepthRecursive(inputData);
14+
Assert.True(expected.Equals(result));
15+
}
16+
17+
[Theory, ClassData(typeof(MaximumDepthofBinaryTreeTestData))]
18+
public void CheckIterative(TreeNode inputData, int expected)
19+
{
20+
var solver = new MaximumDepthofBinaryTree_104();
21+
var result = solver.MaxDepthIterative(inputData);
22+
Assert.True(expected.Equals(result));
23+
}
24+
}
25+
26+
public class MaximumDepthofBinaryTreeTestData : IEnumerable<object[]>
27+
{
28+
public IEnumerator<object[]> GetEnumerator()
29+
{
30+
yield return new object[]
31+
{
32+
new TreeNode(3, left: new TreeNode(9), right: new TreeNode(20, left: new TreeNode(15), right: new TreeNode(9))),
33+
3
34+
};
35+
36+
yield return new object[]
37+
{
38+
new TreeNode(1, right: new TreeNode(3)),
39+
2
40+
};
41+
}
42+
43+
IEnumerator IEnumerable.GetEnumerator()
44+
{
45+
return GetEnumerator();
46+
}
47+
}
48+
}

LeetCodeNet/LeetCodeNet.sln renamed to LeetCodeNet.sln

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
33
# Visual Studio Version 17
44
VisualStudioVersion = 17.2.32519.379
55
MinimumVisualStudioVersion = 10.0.40219.1
6-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LeetCodeNet", "LeetCodeNet.csproj", "{C458316C-98D3-4BB0-AFA7-687ED1D45602}"
6+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LeetCodeNet", "LeetCodeNet\LeetCodeNet.csproj", "{C458316C-98D3-4BB0-AFA7-687ED1D45602}"
77
EndProject
8-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LeetCodeNet.Tests", "..\LeetCodeNet.Tests\LeetCodeNet.Tests.csproj", "{350DF3FF-CBCF-41DE-812F-990CEA69E977}"
8+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LeetCodeNet.Tests", "LeetCodeNet.Tests\LeetCodeNet.Tests.csproj", "{350DF3FF-CBCF-41DE-812F-990CEA69E977}"
99
EndProject
1010
Global
1111
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
using LeetCodeNet.DataStructs;
2+
3+
namespace LeetCodeNet.Easy.Trees
4+
{
5+
/// <summary>
6+
/// https://leetcode.com/problems/maximum-depth-of-binary-tree/
7+
/// </summary>
8+
/// <remarks>
9+
/// Given the root of a binary tree, return its maximum depth.
10+
/// A binary tree's maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.
11+
/// </remarks>
12+
public class MaximumDepthofBinaryTree_104
13+
{
14+
/// <summary>
15+
/// Recursive variant of BFS
16+
/// </summary>
17+
/// <param name="root"> Root </param>
18+
/// <returns> Maximum depth </returns>
19+
/// <remarks>
20+
/// Time complexity: O(n)
21+
/// Space complexity: O(1)
22+
/// </remarks>
23+
public int MaxDepthRecursive(TreeNode root)
24+
{
25+
if (root == null)
26+
{
27+
return 0;
28+
}
29+
30+
return Math.Max(MaxDepthRecursive(root.left), MaxDepthIterative(root.right)) + 1;
31+
}
32+
33+
/// <summary>
34+
/// Iterative variant of BFS. Use queue to traverse through each level of a tree
35+
/// </summary>
36+
/// <param name="root"> Root </param>
37+
/// <returns> Maximum depth </returns>
38+
/// <remarks>
39+
/// Time complexity: O(n)
40+
/// Space complexity: O(h)
41+
/// </remarks>
42+
public int MaxDepthIterative(TreeNode root)
43+
{
44+
if (root == null)
45+
{
46+
return 0;
47+
}
48+
49+
var queue = new Queue<TreeNode>();
50+
var result = 0;
51+
queue.Enqueue(root);
52+
while (queue.Any())
53+
{
54+
++result;
55+
var length = queue.Count;
56+
//// Iterate through nodes of a level
57+
for (var i = 0; i < length; ++i)
58+
{
59+
var node = queue.Dequeue();
60+
if (node.left != null)
61+
{
62+
queue.Enqueue(node.left);
63+
}
64+
65+
if (node.right != null)
66+
{
67+
queue.Enqueue(node.right);
68+
}
69+
}
70+
}
71+
72+
return result;
73+
}
74+
}
75+
}

0 commit comments

Comments
 (0)