目录
前言
本人刷剑指offer的一些程序记录,头文件,主函数都齐全,可直接上机运行
一、题目
输⼊两颗⼆叉
树
A
,
B
,判断
B
是不是
A
的⼦结构。(
PS
:我们约定空树不是任意⼀个树的⼦结构)。
二、程序
1.头文件
#include <iostream>
using namespace std;
typedef struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
}*BiTree;
2.类和主函数
先序遍历创建二叉链表
class solution
{
public:
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL;
else
{
T=new TreeNode;
T->val=ch;
CreateBiTree(T->left);
CreateBiTree(T->right);
}
}
bool SubTree(BiTree treeA,BiTree treeB)
{
bool result=false;
if(treeA!=NULL&&treeB!=NULL)
{
if(treeA->val==treeB->val)
result=DoesTreeA_TreeB(treeA,treeB);
if(!result)
{
result=SubTree(treeA->left,treeB);
}
if(!result)
{
result=SubTree(treeA->right,treeB);
}
}
return result;
}
private:
bool DoesTreeA_TreeB(BiTree treeA,BiTree treeB)
{
if(treeB==NULL) return true;
if(treeA==NULL) return false;
if(treeA->val!=treeB->val) return false;
return DoesTreeA_TreeB(treeA->left,treeB->left)&&DoesTreeA_TreeB(treeA->right,treeB->right);
}
};
int main()
{
BiTree treeA,treeB;
solution stu;
cout<< "请输入 treeA 建立二叉链表的序列:\n";
stu.CreateBiTree(treeA);
cout<< "请输入 treeB 建立二叉链表的序列:\n";
stu.CreateBiTree(treeB);
if(stu.SubTree(treeA,treeB))
cout<< "treeB 是 treeA 的子树\n";
else cout<< "treeB 不是 treeA 的子树\n";
}