二叉搜索树的构建与判别--是否为同一棵二叉搜索树

xiaoxiao2021-02-28  79

题目要求 04-树4 是否同一棵二叉搜索树 (25分)分析 我的基本思路是先构建参考树。然后对剩下的输入序列直接判断能否正确地在参考树上检索到。如果是可以,说明是同一棵二叉搜索树,否则不是。 其实还是可以用结构体数组来存储树,我认为用数组存储比用链表存储简单一些。 其次树的大部分操作都可以用递归的方式来处理。如树的插入,序列的检索。我的代码 #include <iostream> using namespace std; #define Null -1 struct Node{ int data; int left; int right; }; int const maxn = 10; struct Node tree[maxn]; //保存原树 bool checked[maxn]; //标识是否被检索过 int insert(int root,int i,int data); bool find(int root,int data); int main(int argc, const char * argv[]) { int N,L; while (true) { cin>>N; if(N == 0) break; cin>>L; //构建原树 int root = Null,data; for(int i=0; i<N; i++){ cin>>data; root = insert(root, i, data); } for(int j=0; j<L; j++){ bool flag = true; //标志是否和原树相同 for(int i=0; i<N; i++){ checked[i] = false; } for(int i=0; i<N; i++){ cin>>data; if(!flag) continue; flag = find(root,data); //cout<<flag<<" "; } if(flag){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } } } return 0; } int insert(int root,int i,int data){ if(root == Null){ tree[i].data = data; tree[i].left = Null; tree[i].right = Null; root = i; }else{ if(data > tree[root].data){ tree[root].right = insert(tree[root].right, i, data); }else{ tree[root].left = insert(tree[root].left, i, data); } } return root; } bool find(int root,int data){ if(!checked[root] && tree[root].data!=data){ return false; }else if (!checked[root] && tree[root].data==data){ checked[root] = true; return true; }else{ if(tree[root].data < data){ return find(tree[root].right,data); }else{ return find(tree[root].left,data); } } }
转载请注明原文地址: https://www.6miu.com/read-79073.html

最新回复(0)