是否同一棵二叉搜索树
程序员文章站
2024-03-20 10:28:52
...
判断是否为同一棵二叉搜索树
对于二叉搜索树的查找,思路方法是:
1、从根结点开始查找,如果树为空,就返回NULL。
2、如果树不空,就让数据X和根结点的数据Data作比较。
3、如果X的值大于根结点的Data,就往右子树中进行搜索;如果X的值小于根结点的Data,就往左子树中进行搜索。
4、如果X的值等于Data,就表示查找完成,返回该结点。
第一种方法,两棵树直接递归比较:
核心代码:
void judge(struct node *T, struct node *t)
{
if (T&&t)
{
if (T->data != t->data)
{
flag = 1;
return ;
}
judge(T->l, t->l);
judge(T->r, t->r);
}
}
第二种方法,循环查找(效率高):
核心代码:
node* judge(int x, node* T)
{
while(T)
{
if(x > T->data)
T=T->r;
else if(x < T->data)
T=T->l;
else
return T;
}
return NULL;
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
int flag = 0;
struct node
{
int data;
node *l, *r;
};
void Insert(int k, node* &T)
{
if(!T)
{
T = new node;
/// T = (node *)malloc(sizeof(node*));
T->data = k;
T->l = T->r = NULL;
}
else
{
if(k > T->data)
Insert(k, T->r);
else
Insert(k, T->l);
}
}
void judge(node* &T, node* &S)
{
if(T&&S)
{
if(T->data != S->data)
{
flag = 1;
return ;
}
judge(T->l,S->l);
judge(T->r,S->r);
}
}
int main()
{
int n, m;
while(cin>>n)
{
if(n == 0)
break;
cin>>m;
node *T = NULL;
int k;
for(int i = 0; i < n; i++)
{
cin>>k;
Insert(k, T);
}
while(m--)
{
node *S = NULL;
flag = 0;
for(int i = 0; i < n; i++)
{
cin>>k;
Insert(k, S);
}
judge(T, S);
if(flag == 1)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
}
return 0;
}