Skip to content

Commit

Permalink
Merge pull request #78 from arunsathiya/solve/543-diameter-of-binary-…
Browse files Browse the repository at this point in the history
…tree

543. Diameter Of Binary Tree
  • Loading branch information
arunsathiya committed Feb 27, 2024
2 parents 188be33 + b3b0c62 commit 5321ba4
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/543-diameter-of-binary-tree/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package main

type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}

func diameterOfBinaryTree(root *TreeNode) int {
max := 0
var depth func(node *TreeNode) int
depth = func(node *TreeNode) int {
if node == nil {
return 0
}
leftDepth := depth(node.Left)
rightDepth := depth(node.Right)
max = maxHelper(max, leftDepth+rightDepth)
return 1 + maxHelper(leftDepth, rightDepth)
}
depth(root)
return max
}

func maxHelper(a, b int) int {
if a > b {
return a
}
return b
}
49 changes: 49 additions & 0 deletions src/543-diameter-of-binary-tree/main_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package main

import "testing"

func TestDiameterOfBinaryTree(t *testing.T) {
tests := []struct {
root *TreeNode
expected int
}{
{buildTree([]interface{}{1, 2, 3, 4, 5}), 3},
{buildTree([]interface{}{1, 2}), 1},
{buildTree([]interface{}{3, 1, nil, nil, 2}), 2},
}

for _, test := range tests {
if got := diameterOfBinaryTree(test.root); got != test.expected {
t.Errorf("diameterOfBinaryTree() = %d, want %d", got, test.expected)
}
}
}

func buildTree(nodes []interface{}) *TreeNode {
if len(nodes) == 0 {
return nil
}

var root *TreeNode
queue := []*TreeNode{}
for i, val := range nodes {
if val == nil {
continue
}
newNode := &TreeNode{Val: val.(int)}
if i == 0 {
root = newNode
queue = append(queue, newNode)
continue
}
parent := queue[0]
if parent.Left == nil {
parent.Left = newNode
} else if parent.Right == nil {
parent.Right = newNode
queue = append(queue[:0], queue[1:]...) // Dequeue
}
queue = append(queue, newNode)
}
return root
}

0 comments on commit 5321ba4

Please sign in to comment.