力扣26题目:判断树的子结构,官方链接:
https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
题目描述
:给定A、B两棵树,判断B树是否为A树的子结构
给定树A:
4 5
1 2
给定树B:
结果:
返true,因图中可以看出B为A的子结构
解题思路:
-
1.如果B为A的子结构,那么A中的任意节点都有可能成为B的根节点
-
2.我们可以固定A中的任意一个节点,比如就从跟节点开始,那么从该节点要判断能不能覆盖B树,则只需要依次递归左右子树,判断左右子树能覆盖B的左右子树即可。能否覆盖的退出条件为:B == null 说明B树的所有节点都已经匹配了返回true;A == null || A.val != B.val 返回fasle,A为空了,说明A覆盖不了B,或者A的值不等于B的值
-
3.以上是固定的其中一个节点的判断方式,根据A中的任意节点都可能为B的根节点这个条件,我们需要遍历一下A树,按照第2步中的递归方式判断即可,有任意节点满足覆盖返回true即可
java语言实现
* @Description: 判断B是否为A的子结构
* @Param: [A, B]
* @return: boolean
public boolean isSubStructure(TreeNode A, TreeNode B){
//终须遍历A的每个节点
return A != null && B != null && (recur(A,B) || isSubStructure(A.left,B) || recur(A.right,B));
* @Description: 递归判断
* @Param: [A, B]
* @return: boolean
public boolean recur(TreeNode A,TreeNode B){
if (B == null) return true;
if (A == null || A.val != B.val) return false;
return recur(A.left,B.left) && recur(A.right,B.right);
go语言实现
* @Description:判断是否为子结构入口
* @Param: A B
* @return:bool
func isSubStructure(A *TreeNode,B *TreeNode) bool {
return A != nil && B != nil && (recur(A,B) || isSubStructure(A.Left,B) || isSubStructure(A.Right,B) )
* @Description: 从A的当前节点开始,递归判断B是否为A的子结构
* @Param: A B
* @return: bool
func recur(A *TreeNode, B *TreeNode) bool {
if B == nil {
return true
if A == nil || A.Val != B.Val {
return false
return recur(A.Left,B.Left) && recur(A.Right,B.Right)
* @Description:定义二叉树节点
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
力扣26题目:判断树的子结构,官方链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/题目描述:给定A、B两棵树,判断B树是否为A树的子结构举例:输入:给定树A: 3 / \ 4 5 / \ 1 2给定树B: 4 / 1结果:返true,因图中可以看出B为A的子结构解题思路:1.如果B为A的子结构,那么A中的任意节点都有可能成为B的根节点 2.我们.
treeview的增删节点:http://www.cnblogs.com/cpcpc/p/7217926.html
treeview的功能讲解:http://www.jq22.com/jquery-info10461
1、treeview本身不支持动态添加节点、删除节点。网上已经有人修改了源码,增加添加节点、删除节点功能。但是添加根节点或者删除根节点,js貌似会报错。所以本人控制了根节点不能删
这是商品管理页面.
商品分类是:大类-->一级分类-->二级分类-->品牌-->产品.
有一个需求是,当我只选择了大类(手机/数码/配件)和一级分类(手机通讯),我希望商品展示页面能够展示手机通讯下面所有的产品.
也就是说需要寻找分类表里手机通讯下的品牌分类节点.
分类表是
树
形结构.
本来想用MySQL的函数或者存储过程
实现
.但是感觉操作数据比较麻烦,不好写,当然原因是我不太精通...
Trie
树
是一种
树
形结构,通常用于存储字符串,并快速查找字符串是否存在。
在
Java
语言中,可以使用一个类来
实现
Trie
树
,该类包含两个主要部分:节点类和Trie
树
类。
节点类包含:
1. 字母
2. 标志,用于指示该节点是否为字符串的末尾
3. 孩子数组,用于存储下一个字母的位置
Trie
树
类包含:
1. 根节点
2. 插入方法,用于向Trie
树
中插入字符串
3. 查询方法,用于查询字符串是否存在
4. 删除方法,用于删除字符串
下面是一个简单的
Java
实现
:
class TrieNode {
char c;
boolean isLeaf;
TrieNode[] children = new TrieNode[26];
public TrieNode() {}
public TrieNode(char c){
this.c = c;
class Trie {
private TrieNode root;
public Trie() {
root = new TrieNode();
public void insert(String word) {
TrieNode p = root;
for (int i = 0; i < word.length(); i++) {
char c = word.charAt(i);
int index = c - 'a';
if (p.children[index] == null) {
TrieNode temp = new TrieNode(c);
p.children[index] = temp;
p = temp;
} else {
p = p.children[index];
p.isLeaf = true;
public boolean search(String word) {
TrieNode p = searchNode(word);
if (p == null) {
return false;
} else {
if (p.isLeaf)
return true;
return false;
public boolean startsWith(String prefix) {
TrieNode p = searchNode(prefix);
if (p == null) {
go语言基本语法介绍
买个橘籽: