二叉樹-詳解二叉排序樹
阿新 • • 發佈:2019-01-06
二叉搜尋樹
首先二叉排序樹也是一棵二叉樹,所謂二叉樹,就是“任何節點最多隻允許兩個子節點”,這兩個子節點稱為左右子節點。如下便是一個二叉樹。
1、二叉排序樹性質:
1、就是若它的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值;
2、若它的右子樹不空,則右子樹上所有節點的值均大於其根節點的值。
3、換句話說就是:任何節點的鍵值一定大於其左子樹中的每一個節點的鍵值,並小於其右子樹中的每一個節點的鍵值。
如下便是一顆二叉排序樹:
#include<bits/stdc++.h> using namespace std; typedef struct tree { int data; tree *lc,*rc; }*bitree; void create(bitree &root,int n) { if(!root) { root=new tree; root->data=n; root->lc=root->rc=NULL; } else { if(n>root->data) create(root->rc,n); else create(root->lc,n); } } int compare(bitree &r1,bitree &r2) { if(!r1&&!r2) return 1; else if(r1&&r2) { if(r1->data==r2->data) return (compare(r1->lc,r2->lc)&&compare(r1->rc,r2->rc)); } return 0; } int main() { int m,t,k,n,f; while(cin>>m>>t) { if(m==0) break; bitree root=NULL; k=m; while(k--) { cin>>n; create(root,n); } while(t--) { bitree r=NULL; k=m; while(k--) { cin>>n; create(r,n); } if(compare(root,r)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } return 0;