二叉搜索树(排序树,检索树)的建树,查找;

#include<cstdio> #include<string.h> #include<algorithm> #include<stdlib.h> #include<iostream> using namespace std; struct node { int val; node *left; node *right; node() {} node(int xx) { val=xx;left=right=NULL; } }Tree; void Build(node *tree,int x)//建树的过程就是二分查找的过程 { if(tree->val>x) { if(tree->left==NULL) tree->left=new node(x); else Build(tree->left,x); } else if(tree->val<=x) { if(tree->right==NULL) tree->right=new node(x); else Build(tree->right,x); } } void InOrder(node *tree) { if(tree!=NULL) { InOrder(tree->left); printf(“%d “,tree->val); InOrder(tree->right); //printf(“%d “,tree->val); } } //void PostOrder(node* tree) //{ // if(tree!=NULL) // { // PostOrder(tree->left); // // PostOrder(tree->right); // delete tree; // } // //} int Bsearch(node *tree,int key)//此查找就是二分查找的过程 { if(tree==NULL) return -1;//表示没有此数据;查找失败 else { if(tree->val==key)//查找成功 return key; else if(tree->val>key) { Bsearch(tree->left,key); } else if(tree->val<key) { Bsearch(tree->right,key); } } } int main() { int x; int n; cin>>n; cin>>x; Tree.val=x; n–; while(n–) { cin>>x; Build(&Tree,x); } InOrder(&Tree);//已经是排过序的; printf(“\n”); //PostOrder(&Tree);//释放内存 printf(“\n”); cout<<“hello word”<<endl; return 0; }

二叉排序树,二叉检索树,二叉查找树指的都是同一一个东西,以前自己都被这些概念搞迷了;现在终于明白了,线段树也是二叉排序树的一种变形;所以说掌握二叉排序树是基本的要求,以后还有好多神奇的数据结构都是二叉排序树,任重道远;

    原文作者:算法小白
    原文地址: http://www.cnblogs.com/hibernate6/archive/2012/05/27/2521843.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞