一、设计目的与内容
用二叉树的所学知识建立二叉排序树,对已建立的排序二叉树进行遍历(中序),插入,查找,删除
二、算法的基本思想
二叉排序树插入结点的算法:
1若建立的二叉排序树中已有与欲插入的数相同的结点则无须插入;2以while§控制循环变量,若欲插入的数比根结点小的话,执行P=P->lchild;若大于p->data;则执行 P=P->rchild; ,直至p为空。此过程中一直用指针F记录前一步p的位置。3在第2歩确定了的位置的基础上进行插入,若与插入的数小于F->data,则执行F->lchild=S;若大于F->data,则执行F->rchild=S; 二叉排序树的建立:通过对插入函数的调用即T=InsertBST(T,k);以while(k!=-1)控制循环,递归的进行插入直至生成二叉排序树。
二叉排序树的遍历算法:
1、先序遍历:先输出根结点的信息;然后调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;最后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息。2、中序遍历:先调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;然后输出根结点的信息;最后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息。3、后序遍历:先调用函数PreOrderTraverse(T->lchild),递归的输出左子树的信息;然后调用函数PreOrderTraverse(T->rchild),递归输出有子树的信息,最后输出根结点的信息。
二叉排序树的删除算法:
二叉排序树的操作的难点在于删除操作,删除操作时,只需要满足二叉排序树的性质即可,即需要找到要删除结点p的左孩子的最右下方的数替代该结点的数据,然后删除p->lchild的最右下方的结点即可。
对于p->lchild==NULL的,只需要让双亲结点直接指向p->rchild即可(对于根节点,只需要改变头指针)。
对于p->lchild没有右子树的,让删除结点左孩子的数据赋值到删除结点上,然后让删除结点的左孩子等于p->lchild->lchild。
三、源程序及使用系统说明文件
环境:vc++6
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<windows.h>
typedef struct Node
{
int data;
struct Node *lchild;
struct Node *rchild;
}NODE,*BSTree;
int jingdutiao()//简单的进度条程序
{
int i, num = 1;
const char* pic = “|/-\”; //简单动画特效
printf("Loading components,plea