标准BST二叉搜索树写法
本人最近被各种数据结构的实验折磨的不要不要的,特别是代码部分,对数据结构有严格的要求,比如写个BST要分成两个类,一个节点类,要给树类,关键是所以操作都要用函数完成,也就是在树类中不能直接操作节点,需要使用节点类中的函数来实现各种操作。
简直太麻烦,但是花时间写了也是有好处的,认真写完绝对几年忘不了。同时用函数操作数据也更安全,将数据设为私有成员更符合规范。下面给出代码。
#include<iostream>
using namespace std; class BinNode {
private:
int element;
BinNode *leftChild;
BinNode *rightChild;
public:
BinNode(int a, BinNode* left, BinNode* right) {
element = a;
leftChild = left;
rightChild = right;
}
int val() { return element; }
BinNode* left() { return leftChild; }
void setLeft(BinNode *t) { leftChild=t; }
BinNode* right() { return rightChild; }
void setRight(BinNode *t) { rightChild = t; }
};
class BST{
private:
BinNode *root;
BinNode* insertHelp(int x, BinNode* root) {
BinNode* t = root;
if (t == NULL) { t = new BinNode(x, NULL, NULL); return t; }
else if (x < t->val())
t->setLeft(insertHelp(x, t->left()));
else if (x > t->val())
t->setRight(insertHelp(x, t->right()));
return t;
}
void findHelp(const int x, int &count, BinNode* root) {
count++;
if (root == NULL) { count = ;return; }
else if (root->val() == x) return;
if(x<root->val())
findHelp(x, count, root->left());
if(x>=root->val())
findHelp(x, count, root->right());
}
public:
BST() { root = NULL;}
~BST() { clear(root);} void clear(BinNode *root) {
if (root != NULL) {
clear(root->left());
clear(root->right());
delete root;
}
}
void insert(int& x) {
root=insertHelp(x, root);
}
void find(const int x, int &count) {
findHelp(x, count, root);
}
};
int main() {
BST a;
int n;
cout << "请输入节点个数:" << endl;
cin >> n;
cout << "依次输入节点值:"<<endl;
for (int i = ;i < n;i++) {
int x;cin >> x;
a.insert(x);
}
int num;
while ((cout << "请输入需要查找的值:(ctrl+z结束查找)" << endl)&&(cin>>num)&&num!=EOF){
int count=;
a.find(num, count);
if (count == )
cout << "查找失败!" << endl;
else
cout << "查找成功!查找次数为:" << count << endl;
}
system("pause");
return ;
}
下面是实验报告的文档地址
http://wenku.baidu.com/view/d97fb2b114791711cd791711
标准BST二叉搜索树写法的更多相关文章
- 数据结构中很常见的各种树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
数据结构中常见的树(BST二叉搜索树.AVL平衡二叉树.RBT红黑树.B-树.B+树.B*树) 二叉排序树.平衡树.红黑树 红黑树----第四篇:一步一图一代码,一定要让你真正彻底明白红黑树 --- ...
- [LeetCode] Minimum Absolute Difference in BST 二叉搜索树的最小绝对差
Given a binary search tree with non-negative values, find the minimum absolute difference between va ...
- [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- bst 二叉搜索树简单实现
//数组实现二叉树: // 1.下标为零的元素为根节点,没有父节点 // 2.节点i的左儿子是2*i+1:右儿子2*i+2:父节点(i-1)/2: // 3.下标i为奇数则该节点有有兄弟,否则又左兄弟 ...
- 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: BST树 ...
- 浅析BST二叉搜索树
2020-3-25 update: 原洛谷日报#2中代码部分出现一些问题,详情见此帖.并略微修改本文一些描述,使得语言更加自然. 2020-4-9 update:修了一些代码的锅,并且将文章同步发表于 ...
- 530 Minimum Absolute Difference in BST 二叉搜索树的最小绝对差
给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值.示例 :输入: 1 \ 3 / 2输出:1解释:最小绝对差为1,其中 2 和 1 的差的绝对值为 ...
- LeetCode #938. Range Sum of BST 二叉搜索树的范围和
https://leetcode-cn.com/problems/range-sum-of-bst/ 二叉树中序遍历 二叉搜索树性质:一个节点大于所有其左子树的节点,小于其所有右子树的节点 /** * ...
- Leetcode938. Range Sum of BST二叉搜索树的范围和
给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和. 二叉搜索树保证具有唯一的值. 示例 1: 输入:root = [10,5,15,3,7,null,18], L = 7 ...
随机推荐
- PHP中的list()说明
list() 用于在一次操作中给一组变量赋值. 注释:list()只用于数字索引的数组,且假定数字索引从 0 开始. 说明 list() 用数组中的元素为一组变量赋值. 注意,与 array() 类似 ...
- Constraint4:default约束
Default约束的作用是在insert语句执行时,如果未显式给指定的column赋值,那么使用默认值给column赋值:如果在Insert命令中显式为指定的Column赋值,那么将插入显式值.每一列 ...
- SQL 笔记 By 华仔
-------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 全部文章列表
显示文章列表分两块,管理员可以显示全部文章列表,一般用户只显示自己的文章列表.文章列表的显示采用easyui-datagrid.后台需要与之对应的action返回json类型数据 目录 ASP.N ...
- jQuery之ready源码分析
只要使用过jQuery的,想必对ready都不陌生,$(function(){})和$(document).ready(function(){})的使用更是习以为常. 要说到window.onload ...
- MySQL学习笔记十二:数据备份与恢复
数据备份 1.物理备份与逻辑备份 物理备份 物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作.进行物理备份时,一般都需要关闭mysql ...
- css规范
1 前言 CSS 作为网页样式的描述语言,在百度一直有着广泛的应用.本文档的目标是使 CSS 代码风格保持一致,容易被理解和被维护. 虽然本文档是针对 CSS 设计的,但是在使用各种 CSS 的预编译 ...
- 【记录】AutoMapper Project To not support ResolveUsing
示例代码: public List<OrderLineDTO> GetLinesForOrder(int orderId) { Mapper.CreateMap<OrderLine, ...
- 1Z0-053 争议题目解析703
1Z0-053 争议题目解析703 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 703.Given below are RMAN commands to enable backu ...
- Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解
下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...