#include<stdio.h>
#define STACK_SIZE 100
typedef struct node{
node *lchild;
node *rchild;
}Node;
static Node* stack1[STACK_SIZE];
static Node* stack2[STACK_SIZE];
int comp(Node *root1,Node *root2){
Node *p1;Node *p2;
p1=root1;
p2=root2;
int top1=0;
int top2=0;
do{
while(p1!=NULL && p2!=NULL){
top1+=1;
top2+=1;
stack1[top1]=p1;
stack2[top2]=p2;
p1=p1->lchild;
p2=p2->lchild;
}
if((p1!=NULL&&p2==NULL)||(p1==NULL&&p2!=NULL)){
return 0;//表示二者不同构
}
if(top1!=0 && top2!=0){
p1=stack1[top1];
p2=stack2[top2];
top1-=1;
top2-=1;
p1=p1->rchild;
p2=p2->rchild;
}
}while(p1!=NULL||top1!=NULL||p1!=NULL||p2!=NULL);
if(top1==0 && top2==0){
return 1;
}else
return 0;
}
int main(){
Node a,b,c,d,e;
Node f,g,h,k,j,x;
a.lchild=&b;
a.rchild=&c;
b.lchild=&d;
b.rchild=&e;
d.lchild=0;
d.rchild=0;
e.lchild=0;
e.rchild=0;
c.lchild=0;
c.rchild=0;
f.lchild=&g;
f.rchild=&h;
g.lchild=&k;
g.rchild=&j;
k.lchild=0;
k.rchild=0;
j.lchild=0;
j.rchild=0;
h.lchild=&x;
h.rchild=0;
int temp=comp(&a,&f);
if(temp==1){
printf("两个二叉树同构");
}else{
printf("两个二叉树异构");
}
return 0;
}
C语言实现非递归的比较两个二叉树是否同构
最新推荐文章于 2022-08-07 16:33:23 发布