#include<iostream> using namespace std; //定义二叉树结点 typedef struct BiTreeNode{ int value; BiTreeNode *lChild,*rChild; }BiTreeNode,*BiTree; //将结点插入为根节点的孩子结点,如果值小于根节点值,则插入到左子树 void InsertBiTree(BiTree *bst,int value) { //递归结束条件,形成叶子结点 if(*bst==NULL)/ { BiTreeNode *s=(BiTreeNode *)malloc(sizeof(BiTreeNode)); s->value=value; s->lChild=NULL;s->rChild=NULL; *bst=s; } else if(value<(*bst)->value) { InsertBiTree(&((*bst)->lChild),value); } else if(value>(*bst)->value) { InsertBiTree(&((*bst)->rChild),value); } } //创建一棵二叉排序树 void CreateBiTree(BiTree *root) { int value; *root=NULL; cout<<"请输入一系列正整数,以便构成二叉排序树,以-1结束\n"; cin>>value; while(value!=-1) { InsertBiTree(root,value); cin>>value; } } //中序遍历二叉排序树,得到从小到大的正整数序列 void VisitBiTree(BiTree *root) { if(*root!=NULL) { if((*root)->lChild!=NULL) VisitBiTree(&((*root)->lChild)); cout<<(*root)->value<<"\n"; if((*root)->rChild!=NULL) VisitBiTree(&((*root)->rChild)); } } //(非递归)查找二叉排序树某一结点 BiTree * SeekBiTreeNode1(BiTree *root,int value) { BiTree *q=root; while(*q!=NULL) { if((*q)->value==value)return q; else if((*q)->value>value)(*q)=(*q)->lChild; else if((*q)->value<value)(*q)=(*q)->rChild; } return NULL; } //递归查找二叉排树某一结点 BiTree * SeekBiTreeNode2(BiTree *root,int value) { if((*root)==NULL)return NULL; else { if((*root)->value==value)return root; else if((*root)->value>value)SeekBiTreeNode2(&((*root)->lChild),value); else if((*root)->value<value)SeekBiTreeNode2(&((*root)->rChild),value); } } int main() { bool loop=true;int value; char cmd; while(loop){ BiTree *root=(BiTree *)malloc(sizeof(BiTreeNode)); CreateBiTree(root); VisitBiTree(root); cout<<"输入要查找结点的值\n"; cin>>value; if(SeekBiTreeNode1(root,value)!=NULL) cout<<"Found the value"<<" "<<value<<"\n"; else cout<<"Not found\n"; if(SeekBiTreeNode2(root,value)!=NULL) cout<<"Found the value"<<" "<<value<<"\n"; else cout<<"Not found\n"; cout<<"继续吗? Y/y \n"; cin>>cmd; loop=(cmd=='y'||cmd=='Y')?true:false; } return 0; }