不会飞的章鱼

熟能生巧,勤能补拙,静能生慧;念念不忘,必有回响。

题目

剑指 Offer 26. 树的子结构

题解

一次遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//Java
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
// 一开始如果 A 或者 B为空,直接返回false
// 因为题目约定空树不是任意一个树的子结构
if (A == null || B == null) return false;

// 接下来考虑以下几种情况
// A的根节点 VS B的根节点
// 1、A的根节点和B的根节点相同情况,依次比较它们的子节点
// 2、A的根节点和B的根节点不相同情况,A的左子树 VS B的根节点
// 3、A的根节点和B的根节点不相同情况,A的右子树 VS B的根节点
return isSub(A,B) || isSubStructure(A.left,B) || isSubStructure(A.right,B);
}

boolean isSub(TreeNode A,TreeNode B) {
// A和B 不匹配的情况有很多,我们需要一开始去找它们完全匹配的情况
// 即遍历完B,直接为null,说明B的全部节点和A的子结构匹配上
if (B == null) return true;

// A中的节点为空,但B中的节点不为空,说明不匹配
if (A == null) return false;

// A和B都不为空,但数值不同,说明不匹配
if (A.val != B.val) return false;

// 此时,当前这个点是匹配的,继续递归判断左子树和右字树是否 分别匹配
return isSub(A.left,B.left) && isSub(A.right,B.right);
}
}

数据绑定介绍

Gin提供了两类绑定方法:

Must bind

  • Methods: Bind,BindJSON,BindXML,BindQuery,BindYAML
  • 这些方法属于MustBindWith的具体调用。 如果发生绑定错误,则请求终止,并触发 c.AbortWithError(400, err).SetType(ErrorTypeBind) 。响应状态码被设置为 400 并且Content-Type被设置为text/plain; charset=utf-8 。 如果您在此之后尝试设置响应状态码,Gin会输出日志[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 422 。 如果您希望更好地控制绑定,考虑使用ShouldBind等效方法。

Should bind

阅读全文 »

gin框架介绍

gin是用go语言开发的一个web框架,简单易用,是一个轻量级框架。

为什么选择Gin

  • 1.运行响应非常快
  • 2.快速开发
  • 3.文档齐全
  • 4.社区活跃

特性

阅读全文 »

需求

业务上经常会遇到要导出查询结果的Excel文档,我平时会用excelize包来做。

入门

下载

安装

阅读全文 »