Go语言-接口
在 Go 语言中,接口(interface)是一种类型,它定义了对象的行为规范,即定义了一组方法签名,而不需要指定具体的实现。接口使得不同的类型可以通过实现相同的方法集合来进行互换使用。 以一个简单的例子来说明接口的作用,在下面这段代码中,接口Printer定义了一个打印的方法Print(): 123456789101112131415161718192021222324type Printer interface { Print()}type User struct { name string}func (u User) Print() { fmt.Println(u.name,"我爱加班")} func printAll(ps []Printer) { for _, p := range ps { p.Print() }}func main() { var ps []Printer ps =...
Go语言-多态
Go语言中没有类,我们可以使用结构体作为对象,来绑定对应的方法。而接口是功能的抽象,是方法的集合。 我们来实现这样一个例子: 实现猫和狗两个对象,并且他们都有动作:叫,但叫声不同。再实现一个对象鸟,他除了叫,还会飞。 下面是基于Go语言,实现题目要求的代码: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647package mainimport "fmt"type Animal interface { Cry()}type Cat struct{}func (c Cat) Cry() { fmt.Println("喵喵喵")}type Dog struct{}func (d Dog) Cry() { fmt.Println("汪汪汪")}type Bird...
波纹
波光粼粼
Leetcode 513.找树左下角的值
513. 找树左下角的值 - 力扣(Leetcode) 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root = [2,1,3]输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]输出: 7 提示: 二叉树的节点个数的范围是 [1,104] -2^31 <= Node.val <= 2^31 - 1 思考本题可以转化为什么呢? 1.最后一层的最左边的数值,递归的话需要记录最后一层,并且记录最左边的值2.如果是迭代呢?这个就更适合了,只要记录每层迭代中的第一个值,并且不断更新更大的值就好。 代码实现1.递归 12345678910111213141516171819202122var depth int // 全局变量 最大深度var res int // 记录最终结果func findBottomLeftValue(root *TreeNode) int { depth, res = 0,...
Leetcode 404.左叶子之和
123456789101112131415161718192021222324252627/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */func sumOfLeftLeaves(root *TreeNode) int { // 递归 res := 0 // 终止条件 if root == nil { return 0 } leftNode := root.Left leftNodeVal := sumOfLeftLeaves(root.Left) // 左 rightNodeVal := sumOfLeftLeaves(root.Right)// 右 if leftNode != nil && leftNode.Left == nil && leftNode.Right ==...
Leetcode 257.二叉树的所有路径
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */var res []stringvar path []stringfunc binaryTreePaths(root *TreeNode) []string { res = make([]string,0) path = make([]string,0) if (root == nil) { return res } backTracking(root) return res}func backTracking(root...
Leetcode 110.平衡二叉树
110. 平衡二叉树 - 力扣(Leetcode) 简单 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树_每个节点_ 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root = [3,9,20,null,null,15,7]输出:true 示例 2: 输入:root = [1,2,2,3,3,null,null,4,4]输出:false 示例 3: 输入:root = []输出:true 提示: 树中的节点数在范围 [0, 5000] 内 -104 <= Node.val <= 104 思路这里是求高度: 节点到叶子节点的最长距离,使用后序遍历深度是root 到该节点的最长距离(距离☞节点数),使用前序遍历 因此只要分别计算左右子树的高度,并且做差不大于1就行 代码实现使用-1 记录 res 不是平衡二叉树每次执行,都需要判断是不是等于-1,直接返回-1
Leetcode 222.完全二叉树的节点个数
222. 完全二叉树的节点个数 - 力扣(Leetcode) 给出一个完全二叉树,求出该树的节点个数。完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。 示例 1: 输入:root = [1,2,3,4,5,6] 输出:6 示例 2: 输入:root = [] 输出:0 示例 3: 输入:root = [1] 输出:1 提示: 树中节点的数目范围是[0, 5 * 10^4] 0 <= Node.val <= 5 * 10^4 题目数据保证输入的树是 完全二叉树 思路 使用普通二叉树的思想来求,使用层序遍历 或者递归 增加一个变量来存node 的个数 利用完全二叉树的性质,他只有最后一层没有填满,并且是从左到右依次填满的。 代码实现思路1:普通二叉树 1234567891011121314// 递归func countNodes(root...
快来压缩你的博客图片
虽然没多大变化 哈哈哈再试试 更大更高清的图片 实测,效果不太行….但是还要介绍一下如何压缩哈哈哈,毕竟坑踩都踩了😂,怎么也得记录一下待更新…