chore: add hackerrank solutions
This commit is contained in:
67
hacker-rank/tree-height-of-a-binary-tree/main.go
Normal file
67
hacker-rank/tree-height-of-a-binary-tree/main.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package main
|
||||
import (
|
||||
"fmt"
|
||||
"bufio"
|
||||
"strconv"
|
||||
"strings"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var n int
|
||||
var tree *node
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
text := scanner.Text()
|
||||
if n == 0 {
|
||||
n, _ = strconv.Atoi(text)
|
||||
continue
|
||||
}
|
||||
for _, s := range strings.Fields(text) {
|
||||
if v, err := strconv.Atoi(s); err == nil {
|
||||
tree = insert(tree, &node{value:v})
|
||||
}
|
||||
}
|
||||
}
|
||||
fmt.Println(height(tree, 0))
|
||||
}
|
||||
|
||||
type node struct{
|
||||
value int
|
||||
left *node
|
||||
right *node
|
||||
}
|
||||
|
||||
func insert(root, n *node) *node {
|
||||
if root == nil {
|
||||
return n
|
||||
}
|
||||
if n.value < root.value {
|
||||
root.left = insert(root.left, n)
|
||||
return root
|
||||
}
|
||||
root.right = insert(root.right, n)
|
||||
return root
|
||||
}
|
||||
|
||||
func height(root *node, currentHeight int) int {
|
||||
if root == nil {
|
||||
return -1
|
||||
}
|
||||
|
||||
maxHeight := currentHeight
|
||||
|
||||
if root.left != nil {
|
||||
if nh := height(root.left, currentHeight+1); nh > maxHeight {
|
||||
maxHeight = nh
|
||||
}
|
||||
}
|
||||
|
||||
if root.right != nil {
|
||||
if nh := height(root.right, currentHeight+1); nh > maxHeight {
|
||||
maxHeight = nh
|
||||
}
|
||||
}
|
||||
|
||||
return maxHeight
|
||||
}
|
||||
Reference in New Issue
Block a user