#define Nil 0
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
int data;
BiTNode *lchild,*rchild;
}*BiTree;
void CreateBiTree(BiTree &T){
int val;
T=(BiTNode*)malloc(sizeof(BiTNode));
if(!T){
printf("分配内存失败\n");
exit(-1);
}
printf("请输入节点的值\n");
scanf("%d",&val);
if(val==NULL) T=NULL;
else{
T->data=val;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void PreOrderTraverse(BiTree T){
if(T){
printf("%3d",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
bool IsStructInTree(BiTree p,BiTree q){
if(q==NULL)
return true;
if(p==NULL)
return false;
if(p->data!=q->data)
return false;
printf("%d %d\n",p->data,q->data);
return IsStructInTree(p->lchild,q->lchild)&&IsStructInTree(p->rchild,q->rchild);
}
bool SubStructInTree(BiTree T,BiTree Subtree){
bool result=false;
if(T==NULL || Subtree==NULL)
return false;
if(T->data==Subtree->data)
result=IsStructInTree(T,Subtree);
if(T->lchild&&!result)
result=SubStructInTree(T->lchild,Subtree);//这里不要忘记返回值
if(T->rchild&&!result)
result=SubStructInTree(T->rchild,Subtree);
return result;
}
void main(){
BiTree T,Subtree;
CreateBiTree(T);
PreOrderTraverse(T);
CreateBiTree(Subtree);
PreOrderTraverse(Subtree);
bool flag=SubStructInTree(T,Subtree);
if(flag) printf("是子树\n");
else printf("不是子树");
}
ubStructInTree
最新推荐文章于 2024-12-12 17:30:00 发布