Haskell,186个字节
p@(n,s)%(c:z)=maybe((n,s++[c])%z)(\i->p:(n+i,"")%z)$lookup c$zip"),("[-1..1];p%_=[p]
(n,w)&(i,s)|i>n=(i,show i++':':s)|i==n=(n,w++',':s);p&_=p
main=interact$snd.foldl(&)(0,"").((0,"")%)
完整的程序,在上生成树,在上stdin生成指定的输出格式stdout:
& echo '2(7(2,6(5,11)),5(9(4)))' | runhaskell 32557-Deepest.hs 
3:5,11,4
& echo 'A(B(C,D(E)))' | runhaskell 32557-Deepest.hs 
3:E
高尔夫球代码的指南(添加了更好的名称,类型签名,注释以及一些子表达式,并拔出并命名了-否则使用相同的代码;非高尔夫球版本将不会混淆使用编号打断节点,也不会找到最深的节点带有输出格式。):
type Label = String         -- the label on a node
type Node = (Int, Label)    -- the depth of a node, and its label
-- | Break a string into nodes, counting the depth as we go
number :: Node -> String -> [Node]
number node@(n, label) (c:cs) =
    maybe addCharToNode startNewNode $ lookup c adjustTable
  where
    addCharToNode = number (n, label ++ [c]) cs
        -- ^ append current character onto label, and keep numbering rest
    startNewNode adjust = node : number (n + adjust, "") cs
        -- ^ return current node, and the number the rest, adjusting the depth
    adjustTable = zip "),(" [-1..1]
        -- ^ map characters that end node labels onto depth adjustments
        -- Equivalent to [ (')',-1), (',',0), ('(',1) ]
number node _ = [node]      -- default case when there is no more input
-- | Accumulate into the set of deepest nodes, building the formatted output
deepest :: (Int, String) -> Node -> (Int, String)
deepest (m, output) (n, label)
    | n > m     = (n, show n ++ ':' : label)    -- n is deeper tham what we have
    | n == m    = (m, output ++ ',' : label)    -- n is as deep, so add on label
deepest best _ = best                           -- otherwise, not as deep
main' :: IO ()
main' = interact $ getOutput . findDeepest . numberNodes
  where
    numberNodes :: String -> [Node]
    numberNodes = number (0, "")
    findDeepest :: [Node] -> (Int, String)
    findDeepest = foldl deepest (0, "")
    getOutput :: (Int, String) -> String
    getOutput = snd