题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点。意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 就不是子树了。
思路:将二叉树序列化,转化为2个字符串,再利用kmp算法或stl中的find()函数即可,若结点为空用#代表data 二树先序序列化为 1_#8_7##9##_ 用"_"表示一个结点结束符

#include <iostream>
#include <string>
using namespace std;
struct btnode {int data;struct btnode* lchild;struct btnode* rchild;
};
//创建二叉树
void create_btree(btnode* &T){T = new btnode;T->lchild = NULL;T->rchild = NULL;int a;cin >> a;if (a == -1) {T = NULL;return;}else {T->data = a;create_btree(T->lchild);create_btree(T->rchild);}
}
//二叉树转化为string  中序序列化 也可以先序 后序
void btree_to_str(const btnode* T, string& s) {if (T) {btree_to_str(T->lchild, s);s += to_string(T->data);s += "_";//每个结点后加 _ 以分割相邻结点 btree_to_str(T->rchild, s);}
}
int main()
{string s1, s2;btnode *T1, *T2;create_btree(T1);create_btree(T2);btree_to_str(T1, s1);btree_to_str(T2, s2);cout <<"s1="<< s1<<"     s2="<<s2<<endl;if ( s1.find(s2) != -1) {cout << "是子树";}else {cout << "不是子树";}return 0;
}

二叉树 判断一棵树是否是另一棵树的子树相关推荐

  1. 判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树

    package class_04;import java.util.LinkedList; import java.util.Queue; /*** * 判断一棵树是否是搜索二叉树* 判断一棵树是否是 ...

  2. 海量数据:判断一棵树是否为另一棵树的子树

    T1是一棵含有几百万个节点的树,T2含有几百个节点.判断T2是否是T1 的子树. 首先考虑小数据量的情况,可以根据树的前序和中序遍历所得的字符串,来通过判断T2生成的字符串是否是T1字符串的子串,来判 ...

  3. 判断一棵树是否为另一棵树的子树

    题目如下: 判断一棵树是否为另一棵树的子树 思路: (1)先构建两棵树,a树和b树,判断b树是否为a树的子树 (2)构建两个方法,一个用来判断传入的两棵树是否相同,为isSameTree:另一个用来判 ...

  4. 折半查找判定树——(快速判断某棵树是否为折半查找判定树)

    折半查找 也被称作二分查找,即将需要查找的元素与数组中间的元素进行比较:若比中间的元素小,则再与前子表的中间元素进行比较,以此类推直至查找到所需查找元素,或者所需查找元素不在此表中. 折半查找判定树( ...

  5. 判断一棵树是否是另一棵树的子树

    bool containsTree(TreeNode t1, TreeNode t2) { if (t2 == NULL)//空树一定是子树 { return true; } return subTr ...

  6. [二叉树] 判断一个二叉树是否是平衡(剑指offer39)

    [试题描述]定义一个函数,输入一个链表,判断链表是否存在环路 平衡二叉树,又称AVL树.它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的 ...

  7. 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...

    日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...

  8. 二叉树、平衡二叉树、红黑树、B-树、B+树、B*树、T树之间的详解和比较

    ====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ======== ...

  9. 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径

    文章目录 求根节点到叶节点数字之和 深度优先搜索 广度优先搜索 二叉树的最大路径和 DFS 路径总和1 深度优先搜索 广度优先搜索 路径总和2 回溯法 广度优先搜索 左叶子之和 递归 DFS 树的直径 ...

最新文章

  1. 我们如此努力,也不过是个普通人
  2. C语言 使用指针计算两个整数的和与差
  3. 对一些架构设计原则的反思
  4. 图神经网络时代的深度聚类
  5. python和django中的常见错误
  6. JAVA作业——JAVA课程的总结及学习计划
  7. Android访问php webservice
  8. SDUT oj 选拔赛1 迷之好奇
  9. 水彩手绘中华美食PNG素材,提高海报设计效率!
  10. 利用css设置使超链接不能点击或者失效
  11. 关于pdf阅读器的选择
  12. 转:SQL注入攻击的原理
  13. 单片机编程软件很简单(16),Keil单片机编程软件建立工程项目
  14. Java.生成class文件
  15. android q mix3,小米MIX3成首款适配Android Q的5G手机
  16. OJ每日一练——输出元音字母
  17. linux提取基因名称和序列,一种批量提取基因组基因信息并翻译比对分析序列的方法与流程...
  18. nodejs 运行在tomcat_nodejs和tomcat的区别是什么?
  19. 励销云全流程智能销售解决方案,助力B2B企业高效增长
  20. Jfinal engin 集成shiro标签支持

热门文章

  1. 容颜易老,情比金坚--感怀于人生的短暂
  2. 数仓岗位常见面试问题
  3. 个人收藏的50部经典UMD电影的ISO镜像文件
  4. 我的 计算机朋友作文,我的电脑朋友作文
  5. 百度网盘突然大调整,网友:我 2T 的老师没地方放了...
  6. [数电]用python实现卡诺图化简,自动化简逻辑表达式
  7. 通过PubSubHubbub实现YouTube订阅功能
  8. mysql中in的用法详解
  9. C++图书馆管理程序(继承,多态)
  10. js如何将日期转化为时间戳,时间戳转化为日期