判断一棵树B是否是A的子树,对A做DFS,然后不断判断是否和B相同。

其实也可以不对A做DFS,直接遍历A中的每个节点和B做树的比较就行了。

#include <iostream>
#include <vector>
using namespace std; bool sameTree(int a, int b, vector<vector<int> > &treeA, vector<vector<int> > &treeB, vector<int> &valA, vector<int> &valB) {
if (valA[a] != valB[b]) return false;
if (treeB[b].size() == 0) return true;
if (treeA[a].size() != treeB[b].size()) return false;
for (int i = 0; i < treeA[a].size(); i++) {
if (!sameTree(treeA[a][i], treeB[b][i], treeA, treeB, valA, valB))
return false;
}
return true;
} bool subTree(vector<vector<int> > &treeA, vector<vector<int> > &treeB, vector<int> &valA, vector<int> &valB, int root) {
if (sameTree(root, 1, treeA, treeB, valA, valB)) {
return true;
}
for (int i = 0; i < treeA[root].size(); i++) {
if (subTree(treeA, treeB, valA, valB, treeA[root][i])) {
return true;
}
}
return false;
} int main() {
int n, m;
while (cin >> n >> m)
{
vector<vector<int> > treeA(n+1);
vector<vector<int> > treeB(m+1);
vector<int> valA(n+1);
vector<int> valB(m+1);
for (int i = 1; i <= n; i++) {
int tmp;
cin >> tmp;
valA[i] = tmp;
}
for (int i = 1; i <= n; i++) {
int cnt;
cin >> cnt;
while (cnt--) {
int x;
cin >> x;
treeA[i].push_back(x);
}
}
for (int i = 1; i <= m; i++) {
int tmp;
cin >> tmp;
valB[i] = tmp;
}
for (int i = 1; i <= m; i++) {
int cnt;
cin >> cnt;
while (cnt--) {
int x;
cin >> x;
treeB[i].push_back(x);
}
} if (m == 0 || n == 0) {
cout << "NO" << endl;
continue;
}
if (subTree(treeA, treeB, valA, valB, 1)) {
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
}

  

[jobdu]树的子结构的更多相关文章

  1. [Jobdu] 题目1520:树的子结构

    题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构.注:B为空树时不为任何树的子树 typedef struct BTNode{ int key; struct BTNode *rchild; ...

  2. 剑指Offer面试题:17.树的子结构

    一.题目:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构.例如下图中的两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构. 该二叉树的节点定义如下,这里使用C#语言 ...

  3. 剑指offer——树的子结构 (JAVA代码)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: ...

  4. 剑指Offer 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)     思路: 分为2个部分.1先找出A中和B根节点相同的节点r. 2,咱判断B中所有孩子节点是不 ...

  5. 《剑指offer》— JavaScript(17)树的子结构

    树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 相关知识 二叉树子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取.例 ...

  6. 树的子结构(JAVA)

    树的子结构 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) public boolean HasSubtree(TreeNode root1, T ...

  7. 《剑指offer》 树的子结构

    本题来自<剑指offer> 树的子结构 题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分两步走: 第一步:判断根节点,两个根节 ...

  8. 剑指offer(17)树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树 ...

  9. 剑指Offer 17. 树的子结构 (二叉树)

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目地址 https://www.nowcoder.com/practice/6e196c44c7 ...

随机推荐

  1. h2database源码浅析:SQL语句的执行

    最近想好好了解一下数据库的原理,下载了h2database的源码,准备好好看看.此过程的一些想法,暂且记下来,权当做读码笔记吧! 为了调试准备的测试用例: @Test public void test ...

  2. 20160515-hibernate--事务

    事务 JDBCTransaction 单个数据库(一个SesisonFactory对应一个数据库),由JDBC实现. Session session = null; Transaction tx =n ...

  3. 【html】【16】高级篇--毛玻璃效果[模糊]

    参考: http://www.zhangxinxu.com/wordpress/2013/11/%E5%B0%8Ftip-%E4%BD%BF%E7%94%A8css%E5%B0%86%E5%9B%BE ...

  4. OC5_构造方法与self指针

    // // Dog.h // OC5_构造方法与self指针 // // Created by zhangxueming on 15/6/9. // Copyright (c) 2015年 zhang ...

  5. javascript学习笔记20160121-css选择器

    元素可以用id.标签名或类来描述: 更一般的,元素可以基于属性来选取: 这些基本的选择器可以组合使用: 选择器可以指定文档结构(重要,之前一直不太明白>的使用): 选择器可以组合起来选取多个或多 ...

  6. QT5新手上路(2)发布exe文件

    QT编程教程在网上有很多,但写完代码以后如何打包成可执行exe文件却少有提及,本文主要介绍这一部分:1.首先确认自己建的工程在debug模式下运行无误.2.在release模式下运行一遍.(如何更改成 ...

  7. Hdu 1042 N! (高精度数)

    Problem Description Givenan integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input OneN in one ...

  8. php 一维数组排序,保留key值

    function sort_with_keyName($arr,$orderby='desc'){ //在内存的另一处 $a 复制内容与 $arr 一样的数组 foreach($arr as $key ...

  9. head 头标签(转发)

    HTML head 头标签 paddingme | 04 Oct 2014 HTML head 头部分的标签.元素有很多,涉及到浏览器对网页的渲染,SEO 等等,而各个浏览器内核以及各个国内浏览器厂商 ...

  10. 青瓷qici - H5小游戏 抽奖机 “one-arm bandit”

    写在前面 本文实现一个简单的抽奖效果,使用青瓷qici引擎,其中应用了Tween动画,粒子系统,遮罩,UI界面布局,项目设置,发布等功能呢. 目前开发采用1.0.7版本,后续如果界面有所变化请参考这个 ...