6-12 二叉搜索树的操作集
6-12 二叉搜索树的操作集(30 分)
本题要求实现给定二叉搜索树的5种常用操作。
函数接口定义:
BinTree Insert( BinTree BST, ElementType X );
BinTree Delete( BinTree BST, ElementType X );
Position Find( BinTree BST, ElementType X );
Position FindMin( BinTree BST );
Position FindMax( BinTree BST );
其中BinTree
结构定义如下:
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};
- 函数
Insert
将X
插入二叉搜索树BST
并返回结果树的根结点指针; - 函数
Delete
将X
从二叉搜索树BST
中删除,并返回结果树的根结点指针;如果X
不在树中,则打印一行Not Found
并返回原树的根结点指针; - 函数
Find
在二叉搜索树BST
中找到X
,返回该结点的指针;如果找不到则返回空指针; - 函数
FindMin
返回二叉搜索树BST
中最小元结点的指针; - 函数
FindMax
返回二叉搜索树BST
中最大元结点的指针。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>typedef int ElementType;
typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{ElementType Data;BinTree Left;BinTree Right;
};void PreorderTraversal( BinTree BT ); /* 先序遍历,由裁判实现,细节不表 */
void InorderTraversal( BinTree BT ); /* 中序遍历,由裁判实现,细节不表 */BinTree Insert( BinTree BST, ElementType X );
BinTree Delete( BinTree BST, ElementType X );
Position Find( BinTree BST, ElementType X );
Position FindMin( BinTree BST );
Position FindMax( BinTree BST );int main()
{BinTree BST, MinP, MaxP, Tmp;ElementType X;int N, i;BST = NULL;scanf("%d", &N);for ( i=0; i<N; i++ ) {scanf("%d", &X);BST = Insert(BST, X);}printf("Preorder:"); PreorderTraversal(BST); printf("\n");MinP = FindMin(BST);MaxP = FindMax(BST);scanf("%d", &N);for( i=0; i<N; i++ ) {scanf("%d", &X);Tmp = Find(BST, X);if (Tmp == NULL) printf("%d is not found\n", X);else {printf("%d is found\n", Tmp->Data);if (Tmp==MinP) printf("%d is the smallest key\n", Tmp->Data);if (Tmp==MaxP) printf("%d is the largest key\n", Tmp->Data);}}scanf("%d", &N);for( i=0; i<N; i++ ) {scanf("%d", &X);BST = Delete(BST, X);}printf("Inorder:"); InorderTraversal(BST); printf("\n");return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
10
5 8 6 2 4 1 0 10 9 7
5
6 3 10 0 5
5
5 7 0 10 3
输出样例:
Preorder: 5 2 1 0 4 8 6 7 10 9
6 is found
3 is not found
10 is found
10 is the largest key
0 is found
0 is the smallest key
5 is found
Not Found
Inorder: 1 2 4 6 8 9
思路:二叉搜索树忘了?,看完之后曾国强不想用递归。
BinTree Insert(BinTree BST, ElementType X) {if (BST == NULL){BST = (BinTree)malloc(sizeof(struct TNode));BST->Data = X;BST->Left = NULL;BST->Right = NULL;return BST;}BinTree bin = BST;while (bin){if (X < bin->Data){if (bin->Left == NULL){bin->Left = (BinTree)malloc(sizeof(struct TNode));bin->Left->Data = X;bin->Left->Left = NULL;bin->Left->Right = NULL;break;}else bin = bin->Left;}else if (bin->Data < X) {if (bin->Right == NULL){bin->Right = (BinTree)malloc(sizeof(struct TNode));bin->Right->Data = X;bin->Right->Left = NULL;bin->Right->Right = NULL;break;}else bin = bin->Right; }}return BST; } BinTree Delete(BinTree BST, ElementType X) {if (!BST) printf("Not Found\n");else{if (X < BST->Data)BST->Left = Delete(BST->Left, X);else if (X>BST->Data)BST->Right = Delete(BST->Right, X);else{if (BST->Left&&BST->Right){Position pos = FindMin(BST->Right);BST->Data = pos->Data;BST->Right = Delete(BST->Right, BST->Data);}else if (!BST->Left){Position pos = BST;BST = BST->Right;free(pos);}else if (!BST->Right){Position pos = BST;BST = BST->Left;free(pos);}}}return BST; } Position Find(BinTree BST, ElementType X) {if (!BST)return BST;Position pos = BST;while (pos){if (pos->Data == X)return pos;if (pos->Data > X){if (pos->Left == NULL)return pos->Left;else pos = pos->Left;}if (pos->Data < X){if (pos->Right == NULL)return pos->Right;else pos = pos->Right;}} } Position FindMin(BinTree BST) {if (!BST)return BST;Position pos = BST;while (pos->Left)pos = pos->Left;return pos; } Position FindMax(BinTree BST) {if (!BST)return BST;Position pos = BST;while (pos->Right)pos = pos->Right;return pos; }
转载于:https://www.cnblogs.com/zengguoqiang/p/8401272.html
6-12 二叉搜索树的操作集相关推荐
- 6-1 二叉搜索树的操作集 (30 分)
大一下半期数据结构 二叉搜索树的操作集 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinT ...
- 04-树7 二叉搜索树的操作集(c语言实现)
题目 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTr ...
- 04-树7 二叉搜索树的操作集 (30 分)
本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree ...
- 算法 树7 二叉搜索树的操作集
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...
- 6-12 二叉搜索树的操作集 (30 分)
本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree ...
- 数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)
二叉搜索树(Binary Search Tree),简称BST,顾名思义,一颗可以用于搜索的二叉树.BST在数据结构中占有很重要的地位,一些高级树结构都是其的变种,例如AVL树.红黑树等,因此理解BS ...
- 算法导论笔记:12二叉搜索树
1:概念 二叉搜索树也叫二叉排序树,它支持的操作有:SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT, DELETE.所以,一颗二叉搜索 ...
- 二叉搜索树及其操作详解
文章目录 二叉搜索树的定义 二叉搜索树的结构特点 二叉搜索树查询 查找 最大关键字元素和最小关键字元素 后继和前驱 二叉搜索树插入和删除 插入 删除 参考<算法导论(第三版)>第 12 章 ...
- LeetCode刷题笔记 二叉树 二叉搜索树的操作
669 修剪二叉搜索树 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. 输入是一个二叉查找树和两个整数 ...
最新文章
- rails安装与卸载
- 自动化运维——一键安装MySQL
- 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
- LCS最大公共子序列【转载】
- datatable与SqlDataReader
- Leetcode PHP题解--D16 922. Sort Array By Parity II
- 如何将图片序列化_如何将图片文字转化为Word文档?
- linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- 编译器和解释器(Compiler and Interpreter)
- GD32F303x U盘使用
- NTP服务器的相关配置
- 巨杉数据库支持的mysql兼容特性包括_核心特性_SequoiaDB简介_文档中心_SequoiaDB巨杉数据库...
- vlan dot1q tag native
- 数学与计算机的微妙关系
- Python 入门-Task1 变量、运算符、数据类型及位运算
- 曾經的文字﹐曾經的歲月
- 基于PHP+MySQL的服装购物商城系统#毕业设计
- 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
- 解决SQL适配器连接到字符集为US7ASCII的Oracle数据库的中文乱码问题
- 小米5x的Build属性
热门文章
- OpenCV+python:图像梯度
- mysql 主从 MySQLroute_mysql主从复制
- iphone如何信任软件_你还在用大众点评吗?评价软件失去信任还如何活下去
- 大学计算机专业全英文论文,5计算机专业 外文文献 英文文献 外文翻译 jsp应用框架 中英对照 大学学位论文.doc...
- python的切片和索引是什么_NumPy 切片和索引
- 鸿蒙os操作系统合作伙伴,华为公布三大鸿蒙OS系统 已有大量合作伙伴进行开发...
- 清华 词向量库_word2vec 构建中文词向量
- C++中的.hpp理解
- 基于EMQ X,打造AIoT物联网视频接入解决方案
- 2018年摩拜校招嵌入式工程师笔试卷