二叉排序树的构造与删除结点(C语言具备选择功能和进度条功能交互较好)

一、设计目的与内容
用二叉树的所学知识建立二叉排序树,对已建立的排序二叉树进行遍历(中序),插入,查找,删除

二、算法的基本思想
二叉排序树插入结点的算法:
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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值