lc-go/solutions/2/q222/solution.go
2025-12-29 16:41:19 +09:00

37 lines
700 B
Go

package q222
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func count(node *TreeNode, depth int, maxDepth, mdFill *int) bool {
if node == nil {
return false
}
if node.Left == nil && node.Right == nil { // leaf
switch {
case depth == *maxDepth:
*mdFill++
case depth > *maxDepth:
*maxDepth = depth
*mdFill = 1
case depth < *maxDepth:
return true
}
}
return count(node.Left, depth+1, maxDepth, mdFill) ||
count(node.Right, depth+1, maxDepth, mdFill)
}
func countNodes(root *TreeNode) int {
maxdepth, mdFill := 0, 0
count(root, 1, &maxdepth, &mdFill)
if maxdepth == 0 {
return 0
}
return 1<<(maxdepth-1) - 1 + mdFill
}
var _ = countNodes