前言
最近在学习积累算法 的相关内容 在这里记录一下 最近刷leetcode 用go实现的思路 一遍未来复习
1、二叉树最大宽度
二叉树最大宽度
思想:定义树结点坐标 用坐标的差值来获取 一层树的宽度 遍历每一层树 和上一层的宽度做对比 取大的值
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
type wn struct{
val int
*TreeNode
}
func widthOfBinaryTree(root *TreeNode) int {
if root==nil{
return 0
}
treeNode:=[]wn{{0,root}} // 队列记录 这一层的坐标和结点
numMax:=0
for len(treeNode)>0{
//最右结点-最左结点 坐标
if l:=treeNode[len(treeNode)-1].val-treeNode[0].val+1;l>numMax{
numMax=l
}
// 遍历二叉树
extendNode:=[]wn{}
for _,tree := range treeNode{
if tree.Left!=nil{
extendNode=append(extendNode,wn{tree.val*2,tree.Left})
}
if tree.Right!=nil{
extendNode=append(extendNode,wn{tree.val*2+1,tree.Right})
}
}
treeNode=extendNode
}
return numMax
}