1
+ // Depth-First Search (DFS) with recursion
2
+
3
+ // 🕒 Time Complexity: O(n) — where n is the number of nodes in the binary tree.
4
+ // 🗂️ Space Complexity: O(h) — where h is the height of the tree.
5
+ // ⚙️ How It Works (Example Walkthrough):
6
+ // For root = [3,9,20,null,null,15,7]:
7
+ // maxDepth(root) = Math.max(maxDepth(9), maxDepth(20)) + 1 = Math.max(1, 2) + 1 = 3
8
+ // maxDepth(9) = Math.max(maxDepth(null), maxDepth(null)) + 1 = 1
9
+ // maxDepth(20) = Math.max(maxDepth(15), maxDepth(7)) + 1 = Math.max(1, 1) + 1 = 2
10
+ // maxDepth(15) = Math.max(maxDepth(null), maxDepth(null)) + 1 = 1
11
+ // maxDepth(7) = Math.max(maxDepth(null), maxDepth(null)) + 1 = 1
12
+ // So the final result: 3
13
+
14
+ /**
15
+ * Definition for singly-linked list.
16
+ * function ListNode(val, next) {
17
+ * this.val = val === undefined ? 0 : val;
18
+ * this.next = next === undefined ? null : next;
19
+ * }
20
+ */
21
+ /**
22
+ * @param {ListNode[] } lists
23
+ * @return {ListNode }
24
+ */
25
+
26
+ // For maximum depth, the presence of one child doesn't matter much because we are looking for the deepest path from the root to any leaf.
27
+ var maxDepth = function ( root ) {
28
+ // Base case: if the node is null, the depth is 0
29
+ if ( root === null ) return 0 ;
30
+
31
+ // Recursively calculate the depth of the left and right subtrees
32
+ let leftDepth = maxDepth ( root . left ) ;
33
+ let rightDepth = maxDepth ( root . right ) ;
34
+
35
+ // Return the maximum of the two depths plus 1 for the current node
36
+ return Math . max ( leftDepth , rightDepth ) + 1 ;
37
+ } ;
0 commit comments