ubStructInTree

来源:互联网 发布:2016移动支付市场数据 编辑:程序博客网 时间:2024/05/17 09:20
#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("不是子树");}

0 0
原创粉丝点击