C#,二叉搜索树(Binary Search Tree)的迭代方法与源代码

1 二叉搜索树 

二叉搜索树(BST,Binary Search Tree)又称二叉查找树或二叉排序树。
一棵二叉搜索树是以二叉树来组织的,可以使用一个链表数据结构来表示,其中每一个结点就是一个对象。
一般地,除了key和位置数据之外,每个结点还包含属性Left、Right和Parent,分别指向结点的左、右子节点和父结点。
如果某个子结点或父结点不存在,则相应属性的值为空(null)。
根结点是树中唯一父指针为null的结点。
叶子结点的孩子结点指针也为null。

2 节点数据定义


    /// <summary>
    /// 二叉树的节点类
    /// </summary>
    public class BinaryNode
    {
        /// <summary>
        /// 名称
        /// </summary>
        public string Name { get; set; } = "";
        /// <summary>
        /// 数据
        /// </summary>
        public string Data { get; set; } = "";
        /// <summary>
        /// 左节点
        /// </summary>
        public BinaryNode Left { get; set; } = null;
        /// <summary>
        /// 右节点
        /// </summary>
        public BinaryNode Right { get; set; } = null;
        /// <summary>
        /// 构造函数
        /// </summary>
        public BinaryNode()
        {
        }
        /// <summary>
        /// 单数值构造函数
        /// </summary>
        /// <param name="d"></param>
        public BinaryNode(string d)
        {
            Name = d;
            Data = d;
        }
        public BinaryNode(int d)
        {
            Name = d + "";
            Data = d + "";
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="n"></param>
        /// <param name="d"></param>
        public BinaryNode(string n, string d)
        {
            Name = n;
            Data = d;
        }
        /// <summary>
        /// 返回邻接的三元组数据
        /// </summary>
        /// <returns></returns>
        public string[] ToAdjacency()
        {
            string adj = "";
            if (Left != null)
            {
                adj += Left.Name;
            }
            if (Right != null)
            {
                if (adj.Length > 0) adj += ",";
                adj += Right.Name;
            }
            return new string[] { Name, Data, adj };
        }
        /// <summary>
        /// 邻接表
        /// </summary>
        /// <returns></returns>
        public List<string> ToList()
        {
            return new List<string>(ToAdjacency());
        }

        public int Key
        {
            get
            {
                return Int32.Parse(Data);
            }
            set
            {
                Data = value.ToString();
            }
        }
    }
 

/// <summary>/// 二叉树的节点类/// </summary>public class BinaryNode{/// <summary>/// 名称/// </summary>public string Name { get; set; } = "";/// <summary>/// 数据/// </summary>public string Data { get; set; } = "";/// <summary>/// 左节点/// </summary>public BinaryNode Left { get; set; } = null;/// <summary>/// 右节点/// </summary>public BinaryNode Right { get; set; } = null;/// <summary>/// 构造函数/// </summary>public BinaryNode(){}/// <summary>/// 单数值构造函数/// </summary>/// <param name="d"></param>public BinaryNode(string d){Name = d;Data = d;}public BinaryNode(int d){Name = d + "";Data = d + "";}/// <summary>/// 构造函数/// </summary>/// <param name="n"></param>/// <param name="d"></param>public BinaryNode(string n, string d){Name = n;Data = d;}/// <summary>/// 返回邻接的三元组数据/// </summary>/// <returns></returns>public string[] ToAdjacency(){string adj = "";if (Left != null){adj += Left.Name;}if (Right != null){if (adj.Length > 0) adj += ",";adj += Right.Name;}return new string[] { Name, Data, adj };}/// <summary>/// 邻接表/// </summary>/// <returns></returns>public List<string> ToList(){return new List<string>(ToAdjacency());}public int Key{get{return Int32.Parse(Data);}set{Data = value.ToString();}}}

3 二叉树的节点插入与搜索与验证代码

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    /// <summary>
    /// BST(二叉搜索树的迭代方法)
    /// </summary>
    public static partial class Algorithm_Gallery
    {
        public static BinaryNode Insert(BinaryNode node, int key)
        {
            if (node == null)
            {
                return new BinaryNode(key);
            }
            if (key < node.Key)
            {
                node.Left = Insert(node.Left, key);
            }
            else if (key > node.Key)
            {
                node.Right = Insert(node.Right, key);
            }
            return node;
        }

        public static int BST_Find_Floor(BinaryNode root, int key)
        {
            BinaryNode curr = root;
            BinaryNode ans = null;
            while (curr != null)
            {
                if (curr.Key <= key)
                {
                    ans = curr;
                    curr = curr.Right;
                }
                else
                {
                    curr = curr.Left;
                }
            }
            if (ans != null)
            {
                return ans.Key;
            }
            return -1;
        }

        public static int BST_Drive()
        {
            int N = 25;

            BinaryNode root = new BinaryNode("19");
            Insert(root, 2);
            Insert(root, 1);
            Insert(root, 3);
            Insert(root, 12);
            Insert(root, 9);
            Insert(root, 21);
            Insert(root, 19);
            Insert(root, 25);

            return BST_Find_Floor(root, N);
        }
    }
}
 

POWER BY TRUFFER.CN
BY 315SOFT.COM

using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{/// <summary>/// BST(二叉搜索树的迭代方法)/// </summary>public static partial class Algorithm_Gallery{public static BinaryNode Insert(BinaryNode node, int key){if (node == null){return new BinaryNode(key);}if (key < node.Key){node.Left = Insert(node.Left, key);}else if (key > node.Key){node.Right = Insert(node.Right, key);}return node;}public static int BST_Find_Floor(BinaryNode root, int key){BinaryNode curr = root;BinaryNode ans = null;while (curr != null){if (curr.Key <= key){ans = curr;curr = curr.Right;}else{curr = curr.Left;}}if (ans != null){return ans.Key;}return -1;}public static int BST_Drive(){int N = 25;BinaryNode root = new BinaryNode("19");Insert(root, 2);Insert(root, 1);Insert(root, 3);Insert(root, 12);Insert(root, 9);Insert(root, 21);Insert(root, 19);Insert(root, 25);return BST_Find_Floor(root, N);}}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/689164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Matlab论文插图绘制模板第136期—极坐标气泡图

在之前的文章中&#xff0c;分享了Matlab笛卡尔坐标系的气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下极坐标气泡图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋…

微前端(qiankun)vue3+vite

目录 一、什么是微前端 二、主应用接入 qiankun 1.按照qiankun插件 2.注册微应用引用 3.挂载容器 三、微应用接入 qiankun 1.vite.config.ts 2.main.ts ps&#xff1a;手动加载微应用方式 ps&#xff1a;为什么不用 iframe 一、什么是微前端 微前端是一种多个团队通过独…

四、详解Redis集群

一、RDB和AOF持久化 redis的数据一般保存在内存&#xff0c;那么当突然宕机&#xff0c;岂不是数据就丢失了&#xff0c;因此redis实现了将数据持久化的方式&#xff1a;RDB和AOF两种持久化方式。 1.1 RDB持久化&#xff08;bgsave&#xff09; redis支持快照的方式进行数据…

【激光SLAM】激光的前端配准算法

文章目录 ICP匹配方法&#xff08;Point to Point&#xff09;PL-ICP匹配方法&#xff08;Point to Line&#xff09;基于优化的匹配方法&#xff08;Optimization-based Method&#xff09;优化方法的求解地图双线性插值拉格朗日插值法——一维线性插值 相关方法&#xff08;C…

【HarmonyOS】鸿蒙开发之Text组件——第3.2章

text组件属性介绍 textAlign有三种属性start(默认),end,center Column(){//默认文字大小16Text("迪加奥特曼").width(200)Text().margin({top:10,bottom:10})Text("泰罗奥特曼").width(200).fontSize(26).fontColor(Color.Red).textAlign(TextAlign.End)…

H12-821_130

130.如图所示&#xff0c;R1与R2组成一个VRRP备份组1&#xff0c;通过在R1执行vrrp vrid 1 virtual-ip_______命令&#xff0c;可以使其成为IP地址拥有者&#xff0c;让R1为Master, R2为Backup 。 答案&#xff1a;192.168.1.254 注释&#xff1a; IP地址拥有者优先级是255&am…

uniapp富文本文字长按选中(用于复制,兼容H5、APP、小程序三端)

方案&#xff1a;使用u-parse的selectable属性 <u-parse :selectable"true" :html"content"></u-parse> 注意&#xff1a;u-parse直接使用是不兼容小程序的&#xff0c;需要对u-parse进行改造&#xff1a; 1. 查看u-parse源码发现小程序走到以…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸&#xff0c;升职加薪&#xff0c;冲鸭 &#x1f389; 金三银四 今天复工&#xff0c;就要开始准备啦&#x1f4bc;✨ 把握好打工人跳槽的金三银四&#xff0c;获得满意的新工作 &#x1f389; 时间线 年后跳槽时间线&#xff0c;过完年刚好开始准备&#xf…

无人机技术,无人机动力系统知识,电机、电调、桨叶技术详解

无人机动力系统中的电机、电调和桨叶技术都是非常重要的部分&#xff0c;以下是对这些技术的详解&#xff1a; 无人机电机 在无人机动力系统中&#xff0c;电机是将电能转化为机械能的关键部件。其主要作用是产生旋转力矩&#xff0c;驱动螺旋桨的旋转&#xff0c;从而实现无…

const 知识点解析

当我们在c语言中碰到这么一种情况&#xff1a;我们现在有一个变量&#xff0c; 这个变量呢&#xff0c;我们指向访问它&#xff0c; 但不会修改它。但是又担心在后续的代码中不小心将它修改&#xff0c; 这种情况该怎么做呢&#xff1f;这种情况下可以使用const. 被const修饰的…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十四)(1)

实验十四&#xff1a;水塔水流量估计模型 练习一 1.海水温度随着深度的变化而变化,海面温度较高,随着深度的增加,海水温度越来越低.通过验观测得一组海水温度t与深度h的数据如下: h/m 0 1.5 2.5 4.6 8.2 12.5 16.5 26.5 t/℃ 23.5 22.9 20.1 19.1 15.4 11.5 …

数据在内存中的存储以及百度笔试题

目录 一.整型家族 什么是大小端存储&#xff08;百度笔试题&#xff09; 大端字节序存储 小端字节序存储 为什么要讨论大小端字节序存储 写一个程序判断是大端还是小端存储&#xff08;百度笔试题&#xff09; 思路&#xff1a;用1去判断&#xff0c;如果返回1则是小端&a…

腾讯云4核8G12M服务器支持多少人在线?

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

Open CASCADE学习|曲线向曲面投影

在三维空间中&#xff0c;将曲线向曲面投影通常涉及复杂的几何计算。这个过程可以通过多种方法实现&#xff0c;但最常见的是使用数学和几何库&#xff0c;如OpenCASCADE&#xff0c;来处理这些计算。 在OpenCASCADE中&#xff0c;投影曲线到曲面通常涉及以下步骤&#xff1a;…

elementui 中 el-date-picker 控制选择当前年之前或者之后的年份

文章目录 需求分析 需求 对 el-date-picker控件做出判断控制 分析 给 el-date-picker 组件添加 picker-options 属性&#xff0c;并绑定对应数据 pickerOptions html <el-form-item label"雨量年份&#xff1a;" prop"date"><el-date-picker …

开源模型应用落地-工具使用篇-SLB(二)

一、前言 通过学习"开源模型应用落地"系列文章&#xff0c;我们成功地建立了一个完整可实施的AI交付流程。现在&#xff0c;我们要引入负载均衡&#xff0c;以提高我们的AI服务的性能和故障转移能力。本文将详细介绍如何使用腾讯云的负载均衡技术来将我们的AI服务部署…

洛谷 P1150 Peter 的烟

参考代码and代码解读 #include<iostream> using namespace std; int main() { int n,k,nonu; //n烟的数量&#xff0c;k需要多少根烟头换一支烟&#xff0c;nonu记录烟头的个数 cin>>n>>k; int sumn; //一开始就能吸n支烟 nonusum; …

深度学习之pytorch实现线性回归

度学习之pytorch实现线性回归 pytorch用到的函数torch.nn.Linearn()函数torch.nn.MSELoss()函数torch.optim.SGD() 代码实现结果分析 pytorch用到的函数 torch.nn.Linearn()函数 torch.nn.Linear(in_features, # 输入的神经元个数out_features, # 输出神经元个数biasTrue # 是…

Jlink+OpenOCD+STM32 Vscode 下载和调试环境搭建

对于 Mingw 的安装比较困难&#xff0c;国内的网无法正常在线下载组件&#xff0c; 需要手动下载 x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z 版本的软件包&#xff0c;添加环境变量&#xff0c;并将 mingw32-make.exe 名字改成 make.exe。 对于 OpenOCD&#xff0c;需要…

mysql 2-18

加密与解密函数 其他函数 聚合函数 三者效率 GROUP BY HAVING WHERE和HAVING的区别 子查询 单行子查询和多行子查询 单行比较操作符 多行比较操作符 把平均工资生成的结果当成一个新表 相关子查询 EXISTS 一条数据的存储过程 标识符命名规则 创建数据库 MYSQL的数据类型 创建表…