标签:
这里又叫做二叉搜索树
代码:
//二叉排序树(二叉搜索树Binary Search Tree) //杨鑫 #include <stdio.h> #include <stdlib.h> typedef struct node { int key; struct node *lchild, *rchild; }BSTNode, *BSTree; //插入 int InsertBST(BSTree *bst, int k) { BSTree r, s, pre; r = (BSTree)malloc(sizeof(BSTNode)); r->key = k; r->lchild = NULL; r->rchild = NULL; if(*bst == NULL) { *bst = r; return 1; } pre = NULL; s = *bst; while(s) { if(k == s->key) return 0; else if(k < s->key) { pre = s; s = s->lchild; } else { pre = s; s = s->rchild; } } if(k < pre->key) pre->lchild = r; else pre->rchild = r; return 1; } void CreateBST(BSTree *bst) { int key; *bst = NULL; scanf("%d", &key); while(key != -1) { InsertBST(bst, key); scanf("%d", &key); } } /* *打印二叉树: *中序遍历 * */ void InOrder(BSTree root) { if(root != NULL) { InOrder(root->lchild); printf(" %d ", root->key); InOrder(root->rchild); } } /* *搜索 * */ BSTree SearchBST(BSTree bst, int key) { BSTree q; q = bst; //递归 while(q) { if(q->key == key) return q; if(q->key > key) q=q->lchild; else q=q->rchild; } return NULL; //查找失败 } int main() { BSTree T; int tag = 1; int m, n; printf("建立二叉排序树,请输入序列以-1结束:\n"); CreateBST(&T); printf("中序遍历二叉树,序列为:\n"); InOrder(T); printf("\n"); while(tag != 0) { printf("请输入你要查找的元素:\n"); scanf("%d", &n); if(SearchBST(T, n) == NULL) printf("抱歉查找失败!\n"); else printf("查找成功!查找的数字为%d\n", SearchBST(T,n)->key); printf("是否继续查找 是 :请按 1 否则按 0:\n"); scanf("%d", &tag); } return 0; }
结果:
版权声明:本文为博主原创文章,未经博主允许不得转载。
数据结构之---C语言实现二叉排序树(BinarySortTree)
标签:
原文地址:http://blog.csdn.net/u012965373/article/details/48123069