diff --git a/go/543-Diameter-of-Binary-Tree.go b/go/543-Diameter-of-Binary-Tree.go new file mode 100644 index 000000000..73051e637 --- /dev/null +++ b/go/543-Diameter-of-Binary-Tree.go @@ -0,0 +1,32 @@ +/** + * Definition for a binary tree node. + * type TreeNode struct { + * Val int + * Left *TreeNode + * Right *TreeNode + * } + */ +func diameterOfBinaryTree(root *TreeNode) int { + maxLength := 0 + dfs(root, &maxLength) + return maxLength +} + +func dfs(t *TreeNode, maxLength *int) int { + if t == nil { + return 0 + } + + left := dfs(t.Left, maxLength) + right := dfs(t.Right, maxLength) + *maxLength = max(*maxLength, left+right) + + return max(left, right) + 1 +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} \ No newline at end of file