#include <iostream>
#include <cstdio>
#include <stdio.h>
#include <string>
#include <queue>
#include <stack>
using namespace std; class Node{
public :
char data;
struct Node *lchild,*rchild;
}; class BiTree{
public:
Node * root;//头结点
int height=;//树的高度
BiTree() {root=NULL;}
//层序创建二叉树
void create_level(string &s)
{
int p=;
root=new Node(); Node *t,*i,*j;
queue<Node*> qTree;//定义一个队列,存储节点
while(true)
{
if(p==s.size())break;
if(p==)//当头结点未创建
{
t=new Node();
t->data=s[p];
qTree.push(t);//头结点进队
root=t;
p++;
}
else
{
t=qTree.front();//该节点出队
if(p==s.size())break;//树的构建完毕
if(s[p]=='#')//不存在左节点
{
t->lchild=NULL;
p++;
}
else//存在左节点
{
i=new Node();
i->data=s[p];
t->lchild=i;//左节点进队
qTree.push(i);
p++;
} if(p==s.size())break;
if(s[p]=='#')//不存在右节点
{
t->rchild=NULL;
p++;
}
else//存在右节点
{
j=new Node();
j->data=s[p];
t->rchild=j;
qTree.push(j);
p++;
} qTree.pop();//节点左右节点已创建,该节点出队
}
} }
}; class Solution
{
bool isSubtree(Node* pRootA,Node* pRootB)
{
/*以下if语句不能调换,如果调换返回结果都为false
*比如: A树:123 B树:123
* 在遍历两树的节点2时,递归进入下一次,两树的节点2的左节点都为NULL,进入递归
* 此时pRootA=NULL、pRootB=NULL,如果pRootA==NULL放在前面,返回false
*/
if(pRootB==NULL) return true;
if(pRootA==NULL) return false;
if(pRootA->data==pRootB->data)
{
//如果树A树B节点值相等,继续递归遍历他们的左右节点是否相等
return isSubtree(pRootA->lchild,pRootB->lchild)&& isSubtree(pRootA->rchild,pRootB->rchild);
}
else return false;
}
public:
bool HasSubtree(Node* pRootA,Node* pRootB)
{
if(pRootA==NULL||pRootB==NULL)return false;
//从树A的该节点开始遍历看是否与B节点的根值是否相同 || 比较树A的该节点的左节点与树B的根节点 || 比较树A的该节点的右节点与树B的根节点
return isSubtree(pRootA,pRootB)||HasSubtree(pRootA->lchild,pRootB)||HasSubtree(pRootA->rchild,pRootB);
}
}; int main()
{
BiTree a,b;
string s1,s2;
s1="88792####47";
a.create_level(s1);
s2="";
b.create_level(s2);
Solution s;
bool bo=s.HasSubtree(a.root,b.root);
cout<<bo<<endl; return ;
}

输入两棵二叉树A,B,判断B是不是A的子结构(c++实现)的更多相关文章

  1. 剑指offer17:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    1 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 2 思路和方法 (1)先在A中找和B的根节点相同的结点 (2)找到之后遍历对应位置的其他结点, ...

  2. 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  3. 剑指offer38:输入一棵二叉树,求该树的深度

    1 题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2 思路和方法 深度优先搜索,每次得到左右子树当前最大路径,选择 ...

  4. LeetCode 100. Same Tree 判断两棵二叉树是否相等 C++

    Given two binary trees, write a function to check if they are the same or not. Two binary trees are ...

  5. 判断B是不是A的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解答: class Solution:    def HasSubtree(self, pRo ...

  6. same tree(判断两颗二叉树是否相等)

    Input: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3] Output: true Example 2: Input: 1 1 / \ 2 2 [1,2], [1,nul ...

  7. 【遍历二叉树】08判断两个二叉树是否相同【Same Tree】

    迭代版本用的是二叉树的DFS,中的root->right->left +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  8. 笔试算法题(27):判断单向链表是否有环并找出环入口节点 & 判断两棵二元树是否相等

    出题:判断一个单向链表是否有环,如果有环则找到环入口节点: 分析: 第一个问题:使用快慢指针(fast指针一次走两步,slow指针一次走一步,并判断是否到达NULL,如果fast==slow成立,则说 ...

  9. LeetCode——Same Tree(判断两棵树是否相同)

    问题: Given two binary trees, write a function to check if they are equal or not. Two binary trees are ...

随机推荐

  1. Curry化函数

    <script> function fn(){ var i, rult = 0, len = arguments.length; for (i=0;i<len ;i++ ) { ru ...

  2. shell 脚本学习之read

    Read的一些选项 Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项. -a :将内容读入到数值中 echo -n 'please enter:'read -a ...

  3. tp5 excel导出类

    1.引入Loader use think\Loader; 2.导出方法: /** * excel表格导出 * @param string $fileName 文件名称 * @param array $ ...

  4. java调用执行cmd指令启动weblogic

    这里的例子是启动weblogic import java.io.BufferedReader; import java.io.IOException; import java.io.InputStre ...

  5. ACtiveMQ中间件-消息的接收和发送

    一.发送消息基本步骤 (1)启动ActiveMQ的的activemq.bat批处理文件或BrokerService节点 (2)创建连接使用的工厂类ActiveMQConnectionFactory通过 ...

  6. 20145232 韩文浩 《Java程序设计》第7周学习总结

    教材学习内容总结 就目前来说,即使标注为GMT(格林威治时间),实际上谈到的时间指的是UTC时间. 秒的单位定义时基于TAI.也就是铯原子辐射的振动次数. UTC考虑了地球自转越来越慢而有闰秒修正,确 ...

  7. nodejs mongodb 数据库封装DB类 -转

    使用到了nodejs的插件mongoose,用mongoose操作mongodb其实蛮方便的. 关于mongoose的安装就是 npm install -g mongoose 这个DB类的数据库配置是 ...

  8. windows 10 下配置安装node.js

      环境配置 node.js windows10 25.5k 次阅读  ·  读完需要 6 分钟 5 在去年就自己配置安装过node.js,但是使用npm安装模块时安装成功后调用require('mo ...

  9. bootstrap 警告框单个删除

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  10. CSS 基础 例子 Image 高度设置

    body高度100%,三个image高度分别为auto,50%,60%,imge高度为当时body高度的百分比,auto时为原始高度 html代码如下: <!DOCTYPE html> & ...