二叉树 判断一棵树是否是另一棵树的子树
题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点。意思就是二叉树结点的值也要相等 如下图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;
}
二叉树 判断一棵树是否是另一棵树的子树相关推荐
- 判断一棵树是否是搜索二叉树 判断一棵树是否是完全二叉树
package class_04;import java.util.LinkedList; import java.util.Queue; /*** * 判断一棵树是否是搜索二叉树* 判断一棵树是否是 ...
- 海量数据:判断一棵树是否为另一棵树的子树
T1是一棵含有几百万个节点的树,T2含有几百个节点.判断T2是否是T1 的子树. 首先考虑小数据量的情况,可以根据树的前序和中序遍历所得的字符串,来通过判断T2生成的字符串是否是T1字符串的子串,来判 ...
- 判断一棵树是否为另一棵树的子树
题目如下: 判断一棵树是否为另一棵树的子树 思路: (1)先构建两棵树,a树和b树,判断b树是否为a树的子树 (2)构建两个方法,一个用来判断传入的两棵树是否相同,为isSameTree:另一个用来判 ...
- 折半查找判定树——(快速判断某棵树是否为折半查找判定树)
折半查找 也被称作二分查找,即将需要查找的元素与数组中间的元素进行比较:若比中间的元素小,则再与前子表的中间元素进行比较,以此类推直至查找到所需查找元素,或者所需查找元素不在此表中. 折半查找判定树( ...
- 判断一棵树是否是另一棵树的子树
bool containsTree(TreeNode t1, TreeNode t2) { if (t2 == NULL)//空树一定是子树 { return true; } return subTr ...
- [二叉树] 判断一个二叉树是否是平衡(剑指offer39)
[试题描述]定义一个函数,输入一个链表,判断链表是否存在环路 平衡二叉树,又称AVL树.它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的 ...
- 二叉树第i层中的所有结点_讲透学烂二叉树(二):图中树的定义amp;各类型树的特征分析...
日常中我们见到的二叉树应用有,Java集合中的TreeSet和TreeMap,C++ STL中的set.map,以及Linux虚拟内存的管理,以及B-Tree,B+-Tree在文件系统,都是通过红黑树 ...
- 二叉树、平衡二叉树、红黑树、B-树、B+树、B*树、T树之间的详解和比较
====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ======== ...
- 【leetcode-DFS】求根节点到叶节点数字之和/二叉树的最大路径和/路径总和/左叶子之和/树的直径
文章目录 求根节点到叶节点数字之和 深度优先搜索 广度优先搜索 二叉树的最大路径和 DFS 路径总和1 深度优先搜索 广度优先搜索 路径总和2 回溯法 广度优先搜索 左叶子之和 递归 DFS 树的直径 ...
最新文章
- 我们如此努力,也不过是个普通人
- C语言 使用指针计算两个整数的和与差
- 对一些架构设计原则的反思
- 图神经网络时代的深度聚类
- python和django中的常见错误
- JAVA作业——JAVA课程的总结及学习计划
- Android访问php webservice
- SDUT oj 选拔赛1 迷之好奇
- 水彩手绘中华美食PNG素材,提高海报设计效率!
- 利用css设置使超链接不能点击或者失效
- 关于pdf阅读器的选择
- 转:SQL注入攻击的原理
- 单片机编程软件很简单(16),Keil单片机编程软件建立工程项目
- Java.生成class文件
- android q mix3,小米MIX3成首款适配Android Q的5G手机
- OJ每日一练——输出元音字母
- linux提取基因名称和序列,一种批量提取基因组基因信息并翻译比对分析序列的方法与流程...
- nodejs 运行在tomcat_nodejs和tomcat的区别是什么?
- 励销云全流程智能销售解决方案,助力B2B企业高效增长
- Jfinal engin 集成shiro标签支持