建立二叉搜索树

简介: 建立二叉搜索树
#include <stdio.h>
#include <stdlib.h>
typedef struct treenode{
  struct treenode *left;
  struct treenode *right;
  int v;
  int flag; 
}tree;
tree insert(tree t,int v){
  if(!t){
    t=newnode(v);
  }else{
    if(v>t->v){
      t->right=insert(t->right,v);
    }
    else{
      t->left=insert(t->left,v);
    }
  }
  return t;
} 
int check(tree t,int v){
  if(t->flag){
    if(v<t->v)return check(t->left,v);//如果当前访问完 则访问t的左子树 
    else if(v>t->v) return check(t->right,v);//访问右子树 
    else return 0;
  }else{
    if(v==t->v){
      t->flag=1;//表示访问完成 
      return 1; 
    }
    else{
      return 0;
    }
  }
}
int judge(tree t,int n){
  int i;v,flag=0;
  scanf("%d",&v);
  if(v!=t->v)flag=1;
  else t->flag=1;
  for(i=1;i<n;i++){
    scanf("%d",&v);
    if(!flag&&!check(t,v))flag=1;
  }
  if(flag)return 0;
  else return 1;
}
void reset(tree t){
  if(t->left)reset(t->left);
  if(t->right)reset(t->right);
  t->flag=0;
} 
void freetree(tree t){
  if(t->left)reset(t->left);
  if(t->right)reset(t->right);
  free(t);
} 
tree newnode(int V){
  tree t=(tree)malloc(sizeof(struct treenode));//创造节点并初始化  
  t->v=V;
  t->right=t->left=NULL;
  t->flag=0;//表示没被访问过为零 
  return t;
}
tree maketree(int n){
  tree t;
  int i,v;
  scanf("%d",&v);
  t=newnode(v);// 只有一个节点 
  for(i=0;i<n;i++){
    scanf("%d",v);
    t=insert(t,v);
  }
  return t;
}
int main(){
  int n,l,i;
  tree t;
  scanf("%d",&n);
  while(n){
    scaanf("%d",&l);
    t=maketree(n);
    for(i=0;i<l;i++){
      if(judge(t,n)){
        printf("yes\n");
      }
      else{
        printf("no\n");
      }
      resetT(t);
    }
    freetree(t);
    scanf("%d",&n);
  }
  return 0;
}
相关文章
|
6月前
|
算法 C++ 开发者
【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...
【C/C++ 数据结构 】二叉树基本性质:对于任何一颗二叉树T,若其终端结点为n0 ,那么度数为2的结点数为n2。则n0=n2+1...
76 0
|
12月前
|
存储
树与二叉树的概念 性质及其存储结构
树与二叉树的概念 性质及其存储结构
84 0
|
3月前
|
C++
给出一个数据序列,建立二叉排序树,并实现插入功能 对二叉排序树进行中序遍历,可以得到有序的数据序列
该文章通过C++代码示例讲解了如何根据输入数据序列构建二叉排序树,并实现插入功能,随后通过中序遍历输出有序的数据序列,展示了对二叉排序树进行操作和遍历的完整过程。
L2-026 小字辈(树的建立+BFS)
L2-026 小字辈(树的建立+BFS)
75 0
数据结构实验之二叉树的建立与遍历
数据结构实验之二叉树的建立与遍历
|
数据安全/隐私保护
列出叶节点 (二叉树的建立和BFS)
列出叶节点 (二叉树的建立和BFS)
91 0
|
存储
树和二叉树的基本概念和性质
树和二叉树的基本概念和性质
头歌两种遍历方法建立一棵树(前序和中序)
头歌两种遍历方法建立一棵树(前序和中序)
|
机器学习/深度学习 算法
LeetCode——427. 建立四叉树
LeetCode——427. 建立四叉树
85 0
LeetCode——427. 建立四叉树