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;
};
  • 函数InsertX插入二叉搜索树BST并返回结果树的根结点指针;
  • 函数DeleteX从二叉搜索树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 二叉搜索树的操作集相关推荐

  1. 6-1 二叉搜索树的操作集 (30 分)

    大一下半期数据结构 二叉搜索树的操作集 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinT ...

  2. 04-树7 二叉搜索树的操作集(c语言实现)

    题目 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTr ...

  3. 04-树7 二叉搜索树的操作集 (30 分)

    本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree ...

  4. 算法 树7 二叉搜索树的操作集

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree ...

  5. 6-12 二叉搜索树的操作集 (30 分)

    本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree ...

  6. 数据结构 - 从二叉搜索树说到AVL树(一)之二叉搜索树的操作与详解(Java)

    二叉搜索树(Binary Search Tree),简称BST,顾名思义,一颗可以用于搜索的二叉树.BST在数据结构中占有很重要的地位,一些高级树结构都是其的变种,例如AVL树.红黑树等,因此理解BS ...

  7. 算法导论笔记:12二叉搜索树

    1:概念 二叉搜索树也叫二叉排序树,它支持的操作有:SEARCH, MINIMUM, MAXIMUM, PREDECESSOR, SUCCESSOR, INSERT, DELETE.所以,一颗二叉搜索 ...

  8. 二叉搜索树及其操作详解

    文章目录 二叉搜索树的定义 二叉搜索树的结构特点 二叉搜索树查询 查找 最大关键字元素和最小关键字元素 后继和前驱 二叉搜索树插入和删除 插入 删除 参考<算法导论(第三版)>第 12 章 ...

  9. LeetCode刷题笔记 二叉树 二叉搜索树的操作

    669 修剪二叉搜索树 ​ 给定一个二叉查找树和两个整数 L 和 R,且 L < R,试修剪此二叉查找树,使得修剪后所有节点的值都在 [L, R] 的范围内. ​ 输入是一个二叉查找树和两个整数 ...

最新文章

  1. rails安装与卸载
  2. 自动化运维——一键安装MySQL
  3. 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
  4. LCS最大公共子序列【转载】
  5. datatable与SqlDataReader
  6. Leetcode PHP题解--D16 922. Sort Array By Parity II
  7. 如何将图片序列化_如何将图片文字转化为Word文档?
  8. linux salt生成,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  9. 编译器和解释器(Compiler and Interpreter)
  10. GD32F303x U盘使用
  11. NTP服务器的相关配置
  12. 巨杉数据库支持的mysql兼容特性包括_核心特性_SequoiaDB简介_文档中心_SequoiaDB巨杉数据库...
  13. vlan dot1q tag native
  14. 数学与计算机的微妙关系
  15. Python 入门-Task1 变量、运算符、数据类型及位运算
  16. 曾經的文字﹐曾經的歲月
  17. 基于PHP+MySQL的服装购物商城系统#毕业设计
  18. 【雕爷学编程】Arduino动手做(73)---TM1637四位数码管
  19. 解决SQL适配器连接到字符集为US7ASCII的Oracle数据库的中文乱码问题
  20. 小米5x的Build属性

热门文章

  1. OpenCV+python:图像梯度
  2. mysql 主从 MySQLroute_mysql主从复制
  3. iphone如何信任软件_你还在用大众点评吗?评价软件失去信任还如何活下去
  4. 大学计算机专业全英文论文,5计算机专业 外文文献 英文文献 外文翻译 jsp应用框架 中英对照 大学学位论文.doc...
  5. python的切片和索引是什么_NumPy 切片和索引
  6. 鸿蒙os操作系统合作伙伴,华为公布三大鸿蒙OS系统 已有大量合作伙伴进行开发...
  7. 清华 词向量库_word2vec 构建中文词向量
  8. C++中的.hpp理解
  9. 基于EMQ X,打造AIoT物联网视频接入解决方案
  10. 2018年摩拜校招嵌入式工程师笔试卷