相关文章推荐
孤独的咖啡  ·  Guide to Spring ...·  5 月前    · 
霸气的伏特加  ·  hive ...·  1 年前    · 
安静的便当  ·  angular - Snap SVG ...·  1 年前    · 

力扣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) { macos有一个问题可以问一下吗?现在的版本Monterey 12.1 怎么做到可以在用户输入密码之前就启动go的服务? 我的plist配置文件在/Library/LaunchDaemons 我试了很多种方法 发现只能在用户输入密码之后 mac系统还会有一段时间的加载,在这块才会加载 守护进程 可以在输入密码前系统就启动go的服务吗? go语言基本语法介绍 买个橘籽: 简单明了,很好的入门系列,推荐