题目概述
-
算法说明
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 -
测试用例
输入: {1,2,3,4,5,#,6,#,#,7}
返回值: 4
解析&参考答案
- 解析
- 使用递归的方式,依次比较左右子树的深度即可。
- 参考答案
vim jz38.go
package main
import (
"fmt"
)
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func TreeDepth(pRoot *TreeNode) int {
if pRoot == nil {
return 0
}
//return 1 + int(math.Max(float64(TreeDepth(pRoot.Left)), float64(TreeDepth(pRoot.Right))))
if TreeDepth(pRoot.Left) >= TreeDepth(pRoot.Right) {
return 1 + TreeDepth(pRoot.Left)
} else {
return 1 + TreeDepth(pRoot.Right)
}
}
func main() {
root := &TreeNode{1,
&TreeNode{2, &TreeNode{4, nil, &TreeNode{7, nil, nil}}, nil},
&TreeNode{3, &TreeNode{5, nil, nil},
&TreeNode{6, &TreeNode{8, nil, nil}, nil}}}
result := TreeDepth(root)
fmt.Println(result)
}
注意事项
- to add
说明
- 当前使用 go1.15.8
- 参考 牛客网--剑指offer
标题中jzn(n为具体数字)代表牛客网剑指offer系列第n号题目,例如 jz01 代表牛客网剑指offer中01号题目。
注意!!!
- 笔者最近在学习 golang,因此趁机通过数据结构和算法来进一步熟悉下go语言
- 当前算法主要来源于剑指 offer,后续会进一步补充 LeetCode 上重要算法,以及一些经典算法
- 此处答案仅为参考,不一定是最优解,欢迎感兴趣的读者在评论区提供更优解