package main
import "fmt"
func main() {
// var a int
// fmt.Scan(&a)
root := &Treenode {
Val: 1,
Left: &Treenode{
Val: 3,
Left: &Treenode{
Val: 5,
Right: &Treenode{Val: 6},}},
Right: &Treenode{ Val: 2,Right: &Treenode{Val: 9, Right: &Treenode {Val:7 }},
},
}
fmt.Println(getMaxWidth(root) )
fmt.Printf("%s", "hello world")
}
type Treenode struct {
Val int
Left *Treenode
Right *Treenode
}
type pair struct {
node *Treenode
index int
}
func getMaxWidth(root *Treenode) int {
// 定义最大宽度,初始化为 1
ans := 1
// 定义每层
q := []pair{{root, 1}}
for q != nil {
// 计算每层的宽度
tmpAns := q[len(q) -1].index - q[0].index + 1
ans = max(ans, tmpAns)
t := q
q = nil
for _, p := range t {
// 编号为 index 的节点
// 其左节点编号为 2 * index
// 其有节点编号记为 2 * index +1
if p.node.Left != nil {
q = append(q, pair{p.node.Left,p.index * 2})
}
if p.node.Right != nil {
q = append(q, pair{p.node.Right, p.index * 2 + 1})
}
}
}
return ans
}
func max(a, b int) int {
if b > a {
return b
}
return a
}
二叉树的最长宽度
最新推荐文章于 2024-11-10 21:43:58 发布