c#bst查找

news/2024/12/22 13:15:57/
using System;
using 所以;
using System.Collections.Generic;
//想用list必须有他!!!
/*1.	设计BST 的左右链存储结构,并实现BST插入(建立)、删除、查找和排序算法。
2.	实现折半查找算法。
3.	实验比较:设计并产生实验测试数据,考察比较两种查找方法的时间性能,并与理论结果进行比较。以下具体做法可作为参考:
(1)	第1组测试数据: n=1024个已排序的整数序列(如0至2048之间的奇数);第2组测试数据:第1组测试数据的随机序列。                                                                                                                                                                                                                                                                                            
(2)	按上述两组序列的顺序作为输入顺序,分别建立BST。(3)	编写程序计算所建的两棵BST的查找成功和查找失败的平均查找长度(主要是改造Search算法,对“比较”进行计数),并与理论结果比较。
(4)	以上述BST的中序遍历序列作为折半查找的输入,编写程序分别计算折半查找的查找成功和查找失败的平均查找长度,并与理论结果比较。(5)	以上实验能否说明:就平均性能而言,BST的查找与折半查找差不多,为什么?*///笔记!!!//List<int> scoreList = new List<int>();//int列表的使用!!!//scoreList.Add(tmp);//列表在这里的用法!!!Add给列表中的新元素赋值!!!不能直接用等号赋值!!!
namespace BST
{class Program{static void Main(string[] args){int i;int tmp;List<int> scoreList = new List<int>();//int列表的使用Tree Data = new Tree();Tree Data1 = new Tree();Tree Datatmp = new Tree();Console.WriteLine("1024个数的BST树的中序输出");for (i = 0; i < 1024; i++){Data.Add(i,i);}Data.Print1();Console.WriteLine("1024个数的查找的平均查找长度计算");for (i = 0; i < 1024; i++){Data.Search(i);}Data.Printcishu();//对于1024个数字的查找和构建以及输出已经结束for (i = 0; i < 10; i++){Random rd = new Random();tmp = rd.Next(0, 100);scoreList.Add(tmp);//列表在这里的用法!!!Add给列表中的新元素赋值!!!不能直接用等号赋值!!!Data1.Add(tmp, tmp);}Console.WriteLine("生成10个随机数的BST树的中序输出");Data1.Print1();Console.WriteLine("10个随机数的查找的平均查找长度计算");for (i = 0; i < 10; i++){Data1.Search(scoreList[i]);}Data1.Printcishu();//Random rd1 = new Random();//tmp = rd1.Next(0, 100);//Console.WriteLine(tmp);//Data.PrintLevelOrder();Console.ReadKey();}}
}
using System;
using System.Collections.Generic;
//System.Collections.Generic 命名空间包含定义泛型集合的接口和类,
//用户可以使用泛型集合来创建强类型集合,
//这种集合能提供比非泛型强类型集合更好的类型安全性和性能。namespace 所以
{class Tree{int cishu = 0;public class TreeNode{public int Data;//用来决定树的形状public int number;public TreeNode Left;//字段“成员变量”,一般在类的内部做数据交互使用。public TreeNode Right;//就是TreeNode.Right的意思//data left right都是treenode中的私有元素//下面的东西是一个元素public TreeNode(int Dta, int numb)//TreeNode.TreeNode(int Dta)是一个TreeNode里的函数{this.Data = Dta;//this可用于限定类似名称隐藏的成员//eg   this.name = name;//将对象作为参数传递给方法,例如://CalcTax(this);this.number = numb;this.Left = null;//this代表treenodethis.Right = null;}public TreeNode AddNode(TreeNode Root, TreeNode NewNode)//引入两个treenode格式变量//表示TreeNode.AddNode函数{if (Root == null){Root = NewNode;return Root;}else if (Root.Data > NewNode.Data)//上面的用法!引用root这个treenode类中的public int data 元素{Root.Left = AddNode(Root.Left, NewNode);//给左节点赋值}else{Root.Right = AddNode(Root.Right, NewNode);}return Root;}}private TreeNode Root = null;public void Add(int Data, int number){TreeNode newNodeObj = new TreeNode(Data, number);Root = newNodeObj.AddNode(Root, newNodeObj);}//先序列遍private void Print(TreeNode Root){if (Root == null){return;}else{// Console.WriteLine(Root.Data);//输出的是字符串,所以用它也可以Console.WriteLine(Root.number);Print(Root.Left);//自己写的函数,遍历左子树Print(Root.Right);}}//中序遍历public void Print1(){InOrder(Root);//在这个print中运行的是带参数的print,细心!!!}public void InOrder(TreeNode Root){if (Root == null){return;;}else{{InOrder(Root.Left);// Console.WriteLine(Root.Data);Console.WriteLine(Root.number);InOrder(Root.Right);}}}public void Print2(){PostOrder(Root);//在这个print中运行的是带参数的print,细心!!!}//后序遍历public void PostOrder(TreeNode Root){if (Root == null){return;}else{PostOrder(Root.Left);PostOrder(Root.Right);// Console.WriteLine(Root.Data);Console.WriteLine(Root.number);}}public void Print(){Print(Root);//在这个print中运行的是带参数的print,细心!!!}public void Printcishu(){Console.WriteLine("本次查找的平均查找长度如下");Console.WriteLine(cishu);}public void PrintLevelOrder()//层序遍历{int i;int j;int flag;flag = 0;i = 0;j = 0;List<TreeNode> Data = new List<TreeNode>();//列表形元素Data.Add(Root);//在其中新增元素while (Data.Count != 0){TreeNode temp = Data[0];//tmp取代了data[0]Data.RemoveAt(0);//删除data[0]的意思Console.WriteLine($"编号为{temp.number % 100}的元素优先度为{temp.number / 10}");if (temp.Left != null){Data.Add(temp.Left);i = i + 1;}j = j + 1;if (temp.Right != null){Data.Add(temp.Right);i = i + 1;}j = j + 1;if ((i != j) && ((i == 6))){flag = 1;}}}public void Search(int FindIt){SearchIt(Root, FindIt);}private void SearchIt(TreeNode Root, int FindIt){cishu = cishu + 1;if (Root == null){Console.WriteLine("Not Found!!");return;}else if (FindIt == Root.Data){Console.WriteLine("Found!!");Console.WriteLine("该节点中存储的值分别为:");Console.WriteLine(Root.Data);Console.WriteLine(Root.number);return;}else if (FindIt > Root.Data){SearchIt(Root.Right, FindIt);}else if (FindIt < Root.Data){SearchIt(Root.Left, FindIt);}return;}}}

http://www.ppmy.cn/news/759175.html

相关文章

BST插入(建立)、删除、查找和排序

实验要求&#xff1a; 设计BST 的左右链存储结构&#xff0c;并实现BST插入&#xff08;建立&#xff09;、删除、查找和排序算法。实现折半查找算法。实验比较&#xff1a;设计并产生实验测试数据&#xff0c;考察比较两种查找方法的时间性能&#xff0c;并与理论结果进行比较…

二分搜索树-BST,python实现

为什么要用二分搜索树二分搜索树的定义二叉搜索树的基本功能 初始化二分搜索树的节点插入元素查找元素深度优先遍历广度优先遍历删除操作 要删除的节点没有孩子节点要删除的节点有两个孩子节点要删除的节点有一个孩子节点 floor 和ceil操作 为什么要用二分搜索树&#xff1f;…

【Java】高级数据结构算法 -- BST树

目录 基本概念 定义 前序、中序、后序遍历 前驱节点、后继节点&#xff08;主要用于删除有两个孩子的节点&#xff09; 代码实现&#xff08;BST树的基本接口实现&#xff09; BST树的创建 插入&#xff08;非递归、递归&#xff09; 删除&#xff08;递归、非递归&…

(BST) 二叉排序树

文章目录 BST的相关实现 1、BST的创建 2、BST的查找 3、BST的删除 4、获取BST的最大或最小值 5、BST的排序 二叉排序树(Binary Sort Tree)又称二叉查找树、二叉搜索树。它或者是一棵空树;或者是具有下列性质的二叉树: 如果左子树不空,则左子树的结点的值小于根结点的…

014.BST

本文给出二叉搜索树的C实现&#xff0c;在一部分教材中二叉搜索树又称二叉排序树&#xff0c;这种树结构存在多种变种&#xff0c;比如BBST&#xff0c;AVLTree&#xff0c;RBTree&#xff0c;等&#xff0c;其作用是对一系列数据进行合理的布局使得按照中序遍历出来的结果序列…

数据结构与算法_BST树_BST树的定义及删除操作

先写BST树的定义及特点&#xff0c;然后记录BST数的删除操作。 1 BST定义及特点 BST数是一棵特殊的二叉树&#xff0c;如何能得到一颗二叉搜索树呢&#xff1f;下面一个有序序列&#xff0c;经过二分搜索&#xff0c;得到的就是一颗BST树。根节点就是当前一轮要搜索的中间节点…

008.【查找算法】六种查找算法的时间复杂度

1. 算法概述 顺序查找算法&#xff1a;按照数据的顺序一项一项逐个查找&#xff0c;所以不管数据顺序如何&#xff0c;都要从头到尾的遍历一次。速度比较慢&#xff0c;它的时间复杂度是 TO(n)。二分查找算法&#xff1a;将数据分割成两等份&#xff0c;然后用键值(要查找的数…

bst java_Java的BST ZoneId代表什么?

我在DB中存储了这个时间框架&#xff1a;伦敦(BST)的15:00到16:00的任何一天 当我在此时间帧之间收到事件时,我需要执行一个程序IF. 我现在在巴黎(16:22)运行测试,在伦敦是15:22(因此在存储在数据库中的时间帧之间). 这是我的代码 // create Local Date Time from what I have …