链接:点击打开链接
题意:给出一颗二叉搜索树,问从根节点走到指定点需要进行哪些操作
代码1:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
struct tree{
int sum;
tree *l,*r;
}*node,*p,*q;
void build(int x){
p=new tree;
p=node;
while(x!=0){
if(p->sum==0){ //这个节点下没有子树的情况
p->sum=x;
x=0;
}
else if(p->sum>x){ //二叉搜索树的性质,小于父节点的在左子树上,否则在由子树
if(p->l==NULL){ //然后判断是否含有子树
q=new tree;
p->l=q;
p=q;
p->sum=0;
p->l=NULL;
p->r=NULL;
}
else
p=p->l;
}
else if(p->sum<x){
if(p->r==NULL){
q=new tree;
p->r=q;
p=q;
p->sum=0;
p->l=NULL;
p->r=NULL;
}
else
p=p->r;
}
}
}
void dfs(int x){
p=node;
while(p->sum!=x){
if(p->sum>x){
cout<<"E";
p=p->l;
}
else{
cout<<"W";
p=p->r;
}
}
}
int main(){ //建一颗二叉搜索树,然后遍历这颗树
int i,t,x,y,num,query;
scanf("%d",&t);
while(t--){
scanf("%d",&num);
node=new tree;
node->sum=0;
node->l=NULL;node->r=NULL; //将根节点初始化
for(i=0;i<num;i++){
scanf("%d",&x);
build(x);
}
scanf("%d",&query);
for(i=0;i<query;i++){
scanf("%d",&y);
dfs(y);
cout<<endl;
}
}
return 0;
}
代码2:
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
struct node{
node *l,*r;
int value;
node(){}
node(int rt){
value=rt;
l=r=NULL;
}
};
void insert(node *&p,int value){
if(value<p->value){
if(p->l==NULL){
p->l=new node(value);
return;
}
else insert(p->l,value);
}
else{
if(p->r==NULL){
p->r=new node(value);
return;
}
else insert(p->r,value);
}
}
void find(node *&p,int value){
if(value==p->value){
putchar('\n');
return;
}
else if(value<p->value){
putchar('E');
find(p->l,value);
}
else{
putchar('W');
find(p->r,value);
}
} //二叉搜索树模板
int main(){
int i,t,n,m,rt,num;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&rt);
node *root=new node(rt);
for(i=1;i<n;i++){
scanf("%d",&num);
insert(root,num);
}
scanf("%d",&m);
while(m--){
scanf("%d",&num);
find(root,num);
}
}
return 0;
}