一步一步写算法--二叉排序树
来源:互联网 发布:博威计价软件 编辑:程序博客网 时间: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
- 一步一步写算法--二叉排序树
- 一步一步复习数据结构和算法基础-二叉排序树
- 一步一步写算法
- 一步一步写算法--栈
- 一步一步写算法
- 一步一步写算法
- 一步一步写算法
- 一步一步写算法(之)
- 一步一步写算法(开篇)
- 一步一步写算法(之)
- 一步一步写算法(之)
- 一步一步写算法(开篇)
- 一步一步写算法--堆排序
- 一步一步写算法(开篇)
- 一步一步写算法(开篇)
- 一步一步写算法(开篇)
- 一步一步写算法(之洗牌算法)
- 一步一步写算法(之 A*算法)
- [MFC]custom控件需要绑定
- 跟我一起写udev规则(译)
- 《加密与解密》第三版 CrackMe的注册机代码
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
- C# ADO.NET的五个常用对象及数据库连接操作
- 一步一步写算法--二叉排序树
- eclipse代码注释说明
- mysql 事务处理
- 帮助软件开发者提高效率的10个小窍门
- 孙鑫VC++笔记(五)
- android 手机文件夹代表的意思(手机本机一部分和内存卡大部分)
- Linux信号量编程实例
- Cstring转int型问题(error C2664: “atoi”: 不能将参数 1 从“CString”转换为“const char *”))
- busybox之getopt32用法