#include<stdio.h> #include<stdlib.h> /* 递归前中后遍历 */ typedef struct node { int data; struct node*left; struct node*right; }BTnode; BTnode*CreateTree(int a[],int n){ BTnode*root,*c,*p,*pa; int i; root=(BTnode*)malloc(sizeof(BTnode)); root->data=a[0]; root->left=root->right=NULL;//建立根节点 for(i=1;i<n;i++) { p=(BTnode*)malloc(sizeof(BTnode)); p->data=a[i]; p->left=p->right=NULL; c=root; //根节点给C指针 while(c) { //判断p结点时属于左子树还是右子树 pa=c; //pa指针是p结点的父节点 if(c->data>p->data) c=c->left; else c=c->right; } if(pa->data>p->data) //p结点时父节点的左孩子还是右孩子 pa->left=p; else pa->right=p; } return root; } BTnode * Query(BTnode *root,BTnode *parent,BTnode *p,int key) { if(!root) p = parent; return NULL; if(root->data == key) p=root; return root; if(key <root->data ) return Query(root->left,root,p,key); if(key >root->data ) return Query(root->right,root,p,key); } void Forder(BTnode*root) { if(root){ printf("%d",root->data); printf("\n"); Forder(root->left); Forder(root->right); } } void Inorder(BTnode*root) { if(root){ Inorder(root->left); printf("%3d",root->data); printf("\n"); Inorder(root->right); } } void Porder(BTnode*root) { if(root){ Porder(root->left); Porder(root->right); printf("%6d",root->data); printf("\n"); } } int main(void) { BTnode*root; int *a; int n; int i; printf("请输入n="); scanf("%d",&n); a=(int*)malloc(n*sizeof(int)); printf("请输入数组a[]="); for(i=0;i<n;i++) scanf("%d",&a[i]); root=CreateTree(a,n); Forder(root); Inorder(root); Porder(root); root = Query(root,NULL,NULL,10); if(!root) printf(" 二叉树中没有key"); else printf("%d",root->data); }
二叉排序树的查找
原创
©著作权归作者所有:来自51CTO博客作者闫宝通的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:普通二叉树的建立
下一篇:二叉排序树创建(递归)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
查找——树表——>二叉排序树
文章目录树表二叉排序树二叉排序树的操作-查找二叉排序树的操作-插入二叉排序树的操作空,则右子树上所有结点的值...
树表 二叉排序树 查找 数据结构 c++ -
二叉排序树
数据结构试验:/*已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n),以数组a中的数据作为输入建立一棵二叉排序树,并将建立的二叉排序树...
二叉排序树 中序遍历 #include 结点 #define