一步一步写算法--二叉排序树

来源:互联网 发布:博威计价软件 编辑:程序博客网 时间:2024/04/29 11:51

BST:

1,若左子树非空,则左子树上所有结点关键字值均小于根结点的关键值

2,若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字值

3,左右子树本身也分别是一颗二叉排序树

源程序

#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct BSTNode{ElemType data;struct BSTNode *lchild,*rchild;}BSTNode,*BiTree;//二叉排序树插入int bst_insert(BiTree &T,ElemType k){if(T==NULL){T=(BiTree)malloc(sizeof(BSTNode));T->data=k;T->lchild=NULL;T->rchild=NULL;return 1;}else if(k== T->data)//插入节点重复,不再插入return 0;else if(k< T->data)return bst_insert(T->lchild,k);elsereturn bst_insert(T->rchild,k);}//二叉排序树构造void bst_create(BiTree &T){T=NULL;ElemType e;printf("建立二叉排序树,以0结束");scanf("%d",&e);while(e){bst_insert(T,e);scanf("%d",&e);}printf("二叉排序树构造成功!");}//先序遍历void pre_traverse(BiTree &T){if(T!=NULL){printf("%d",T->data);if(T->lchild !=NULL)pre_traverse(T->lchild);if(T->rchild!=NULL)pre_traverse(T->rchild);}}//中序遍历void mid_traverse(BiTree T){if(T!=NULL){if(T->lchild !=NULL)pre_traverse(T->lchild);printf("%d",T->data);if(T->rchild!=NULL)pre_traverse(T->rchild);}}//后序遍历void post_traverse(BiTree &T){if(T!=NULL){if(T->lchild !=NULL)pre_traverse(T->lchild);if(T->rchild!=NULL)pre_traverse(T->rchild);printf("%d",T->data);}}void main(){BiTree T;bst_create(T);printf("先序遍历结果:");mid_traverse(T);}

结果

建立二叉排序树,以0结束5 4 3 7 9 2 6 0二叉排序树构造成功!先序遍历结果:4325769


原创粉丝点击