数据结构题及c语言版实验报告排序,数据结构二叉排序树实验报告

《数据结构二叉排序树实验报告》由会员分享,可在线阅读,更多相关《数据结构二叉排序树实验报告(7页珍藏版)》请在装配图网上搜索。

1、实验报告课程名:数据结构(C语言版)实验名:二叉排序树姓名: 班级: 学号: 撰写时间:2014.12.18一 实验目的与要求1. 掌握二叉排序树上进行插入和删除的操作2. 利用 C 语言实现该操作二 实验内容 对于一个线形表, 利用不断插入的方法, 建立起一株二叉排序树 从该二叉排序树中删除一个叶子节点, 一个只有一个子树的非叶子节,一个有两个子树的非叶子节点。三 实验结果与分析#include #include /二叉查找树结点描述 typedef int KeyType; typedef struct Node KeyType key; /关键字 struct Node * left; 。

2、/左孩子指针 struct Node * right; /右孩子指针 struct Node * parent; /指向父节点指针 Node,*PNode; /往二叉查找树中插入结点 /插入的话,可能要改变根结点的地址,所以传的是二级指针 void inseart(PNode * root,KeyType key) /初始化插入结点 PNode p=(PNode)malloc(sizeof(Node); p-key=key; p-left=p-right=p-parent=NULL; /空树时,直接作为根结点 if(*root)=NULL) *root=p; return; /插入到当前结点(。

3、*root)的左孩子 if(*root)-left = NULL & (*root)-key key) p-parent=(*root); (*root)-left=p; return; /插入到当前结点(*root)的右孩子 if(*root)-right =

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉排序树是一种特殊的二叉树,它的左子树中所有节点的值都小于根节点的值,右子树中所有节点的值都大于根节点的值。这个特性使得二叉排序树非常适合用于查找操作。在C语言中,我们可以使用结构体来实现二叉排序树。 以下是C语言实现二叉排序树的基本操作: 1.定义二叉排序树的结构体 ```c typedef struct BSTNode { int data; // 节点的值 struct BSTNode *left; // 左子树 struct BSTNode *right; // 右子树 } BSTNode, *BSTree; ``` 2.创建二叉排序树 ```c void createBSTree(BSTree *T, int data) { if (*T == NULL) { *T = (BSTree)malloc(sizeof(BSTNode)); (*T)->data = data; (*T)->left = NULL; (*T)->right = NULL; } else if (data < (*T)->data) { createBSTree(&((*T)->left), data); } else if (data > (*T)->data) { createBSTree(&((*T)->right), data); } } ``` 3.查找二叉排序树中的节点 ```c BSTree searchBSTree(BSTree T, int key) { if (T == NULL || T->data == key) { return T; } else if (key < T->data) { return searchBSTree(T->left, key); } else { return searchBSTree(T->right, key); } } ``` 4.插入节点到二叉排序树中 ```c void insertBSTree(BSTree *T, int data) { if (*T == NULL) { *T = (BSTree)malloc(sizeof(BSTNode)); (*T)->data = data; (*T)->left = NULL; (*T)->right = NULL; } else if (data < (*T)->data) { insertBSTree(&((*T)->left), data); } else if (data > (*T)->data) { insertBSTree(&((*T)->right), data); } } ``` 5.删除二叉排序树中的节点 ```c void deleteBSTree(BSTree *T, int key) { if (*T == NULL) { return; } if (key < (*T)->data) { deleteBSTree(&((*T)->left), key); } else if (key > (*T)->data) { deleteBSTree(&((*T)->right), key); } else { if ((*T)->left == NULL && (*T)->right == NULL) { free(*T); *T = NULL; } else if ((*T)->left == NULL) { BSTree temp = *T; *T = (*T)->right; free(temp); } else if ((*T)->right == NULL) { BSTree temp = *T; *T = (*T)->left; free(temp); } else { BSTree temp = (*T)->right; while (temp->left != NULL) { temp = temp->left; } (*T)->data = temp->data; deleteBSTree(&((*T)->right), temp->data); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值