golang实现一些算法


前言


最近在学习积累算法 的相关内容 在这里记录一下 最近刷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
}

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值