LC 0104 [E] Maximum Depth of Binary Tree - ALawliet/algorithms GitHub Wiki

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def maxDepth(self, root: Optional[TreeNode]) -> int:
        self.maxDepth = 0
        
        def dfs(node, depth):
            
            if not node.left and not node.right:
                self.maxDepth = max(self.maxDepth, depth)
            
            if node.left:
                dfs(node.left, depth + 1)
                
            if node.right:
                dfs(node.right, depth + 1)
                
        if not root: return 0
        dfs(root, 1)
        
        return self.maxDepth

    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        
        L = self.maxDepth(root.left)
        R = self.maxDepth(root.right)
        
        return 1 + max(L, R)

    def maxDepth(self, root: Optional[TreeNode]) -> int:
        if not root: return 0
        stack = [ [root, 1] ]
        res = 0
        
        while stack:
            node, depth = stack.pop()
            
            res = max(res, depth)
            
            if node.left:
                stack.append( [node.left, depth + 1] )
            
            if node.right:
                stack.append( [node.right, depth + 1] )
                
        return res