二叉树的子结构

来源:互联网 发布:淘宝卖充值卡怎么弄 编辑:程序博客网 时间:2024/04/30 04:32

主要通过递归完成:

1 根节点是否相同,不相同,进行第一次递归

2 根节点相同,在另外一个函数进行递归,判断子节点是否相同

#include <iostream>#include <stack>using namespace std; typedef struct tree{int key;structtree *left;structtree *right; } * pTree,Tree; void createTree(pTree & phead){int temp;scanf("%d",&temp);if(temp!=0){phead=(pTree)malloc(sizeof(Tree));phead->key=temp;createTree(phead->left);createTree(phead->right);}else{phead=NULL;} } void print(const pTree phead){ if(phead){printf("%d ",phead->key);print(phead->left);print(phead->right); } } bool hasSub(pTree phead1,pTree phead2){bool result = false;if(phead2 ==  NULL)  //必须先判断phead2 再判断phead1  注意return true;if(phead1 == NULL)return false;if(phead1->key != phead2->key)return false; return hasSub(phead1->left,phead2->left)  &&   hasSub(phead1->right,phead2->right);    }bool hasSubTree(const pTree phead1,const pTree phead2){bool result=false;if( phead1 != NULL && phead2 != NULL){if(phead1->key==phead2->key)result=hasSub(phead1,phead2);if(!result)    result=hasSubTree(phead1->left,phead2);if(!result)    result=hasSubTree(phead1->right,phead2);}return result; }int main(){pTree pHead1=NULL;pTree pHead2=NULL;createTree(pHead1);//createTree(pHead2);print(pHead1);cout<<endl;createTree(pHead2);print(pHead2);cout<<endl;cout<<(bool)hasSubTree(pHead1,pHead2);return 0;}

运行结果:


0 0
原创粉丝点击