C#使用自定义的节点类Node(int data)实现二叉树类BinaryTree及其方法

目录

一、涉及到的知识点

1.树结构

2.树结构的数据类型定义

(1)结构定义

(2)基本操作

3.二叉树

(1)定义和特点

(2)遍历二叉树的输出结果

二 、二叉树的实例


一、涉及到的知识点

1.树结构

        树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用。直观来看,树是以分支关系定义的层次结构。 

2.树结构的数据类型定义

        包含树的结构定义和基本操作

(1)结构定义

  • 树是n(n≥1)个节点的有限集,在任意一棵非空树中,都应该符合以下条件:有且仅有一个特定的节点称为根的节点。
  • 当n>1时,其余节点可分为m个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树。

(2)基本操作

        树的基本操作主要包括构造空树、销毁树、清空树、求树的深度、访问节点、插入子树和删除子树等。

3.二叉树

(1)定义和特点

        二叉树是一种特殊的树形数据结构,它的每个节点最多有两个子节点,通常分为左子节点和右子节点。下面是二叉树的一些特点:

  • 二叉树的每个节点最多有两个子节点,不存在超过两个子节点的情况。
  • 二叉树的根节点没有父节点。
  • 二叉树中每个节点的左子树的所有节点值都小于该节点的值,右子树的所有节点值都大于该节点的值。这是二叉搜索树(Binary Search Tree)的特性。
  • 二叉树的深度为1,只有一个根节点时;深度为2,有根节点和一个子节点时;深度为3,有根节点和两个子节点时,等等。
  • 二叉树可以为空,即没有根节点。
  • 二叉树的节点可以存储数据,也可以是空的(即不含数据)。
  • 二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。这三种遍历方式分别以不同的顺序访问二叉树的节点。

        二叉树在计算机科学中有广泛的应用,例如:二叉搜索树、堆、红黑树等。它们在数据存储、搜索和排序等方面具有很高的效率。

(2)遍历二叉树的输出结果

        例如,对二叉树添加了节点:6,4,8,3,5,7,9。遍历输出各节点,显示的结果是:3,4,5,6,7,8,9。这貌似被排序后输出的。其实,看到的输出结果是由于二叉搜索树的性质决定的。二叉搜索树是一种特殊的二叉树,它的每个节点都满足以下条件:

  • 左子树中所有节点的值都小于当前节点的值。
  • 右子树中所有节点的值都大于当前节点的值。

        因此,当按照顺序插入节点时(例如:6,4,8,3,5,7,9),二叉搜索树会自动按照顺序排列这些节点。遍历二叉搜索树时,当然九按照顺序输出这些节点。

        所以看到的输出结果是由于二叉搜索树的性质和遍历方式导致的,而不是由于排序算法。

二 、二叉树的实例

// 二叉树类及其方法namespace _135_2
{public class Node(int data){public int? Data = data;public Node? Left = null;public Node? Right = null;}public class BinaryTree{private Node? root;//public Node? Root { get; private set; }public Node? Root{get{return root;}}public BinaryTree(){root = null;}public void AddNode(int data){root = AddNodeRec(root!, data);}private static Node AddNodeRec(Node node, int data){if (node == null){return new Node(data);}if (data < node.Data){node.Left = AddNodeRec(node.Left!, data);}else if (data > node.Data){node.Right = AddNodeRec(node.Right!, data);}return node;}//public static void PrintTree(Node node)//{//    if (node != null)//    {//        PrintTree(node.Left!);//        Console.WriteLine(node.Data);//        PrintTree(node.Right!);//    }//}}class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);BinaryTree tree = new();tree.AddNode(6);tree.AddNode(4);tree.AddNode(8);tree.AddNode(3);tree.AddNode(5);tree.AddNode(7);tree.AddNode(9);Console.WriteLine("二叉搜索树中的节点:");/*BinaryTree.*/PrintTree(tree.Root!);Console.ReadKey();}static void PrintTree(Node node){if (node != null){PrintTree(node.Left!);Console.WriteLine(node.Data);PrintTree(node.Right!);}}}
}
//
/*
二叉搜索树中的节点:
3
4
5
6
7
8
9*/

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

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

相关文章

【JavaWeb】Tomacat部署Web项目

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍【JavaWeb】Tomacat部署Web项目的详细使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题…

《为什么学生不喜欢上学?》读书笔记

书简介 美国弗吉尼亚大学心理学教授威林厄姆的教育心理学著作。 作者在文末揭示了撰写此书的目的&#xff1a; 【 教育是将世代积累的智慧传递给孩子&#xff0c;我们强烈地相信它的重要性&#xff0c;因为我们知道&#xff0c;它为每个孩子以及其他所有人都带来了更好生活的希…

./ 相对路径与node程序的启动目录有关

node:internal/fs/sync:78 return binding.openSync( ^ Error: ENOENT: no such file or directory, open D:\前端的学习之路\项目\codeHub\keys\private_key.pem at Object.open (node:internal/fs/sync:78:18) at Object.openSync (node:fs:565:…

Spring Boot 实现文件本地以及OSS上传

Spring Boot 实现文件上传 Maven依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </dependency>上传到本地 package yang.controller;import java.…

js关于防抖和节流的问题

目录 一、防抖 1、防抖代码编写 2、添加一个是否立即执行的参数flag 3、防抖应用场景 二、节流 1、节流函数编写 时间戳 定时器 时间戳 定时器。 2、节流场景 scroll 滚动 input 动态搜索 三、总结 四、防抖的库 防抖和节流的话题&#xff0c;无论是在面试还是在…

【网站项目】014乡镇自来水收费系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Java的控制流语句详解

Java的控制流语句详解 文章目录 Java的控制流语句详解前言一、顺序结构二、选择结构1. if语句&#xff1a;用于判断一个条件是否为真&#xff0c;如果为真则执行相应的代码块。2. if...else if...else语句&#xff1a;用于在条件为真时执行一段代码&#xff0c;否则执行另一段代…

在Dart中,读取文件有两种常见的方式:使用 Stream 和使用 Future

使用 Stream 读取文件&#xff1a; import dart:io;void main() {Stream<List<int>> stream File("example.txt").openRead();stream.listen((List<int> event) {// 处理文件内容print(event);}); }异步处理&#xff1a; Stream 适用于处理大文件…

Qualcomm AI Hub-API介绍

Qualcomm AI Hub极大的简化了AI 模型部署到边缘设备的过程。本文主要介绍了Qualcomm AI Hub使用的各种API接口&#xff0c;还有各个模型配置的参数数据&#xff0c;具体可以参考API documentation API介绍&#xff1a; Core API API的核心功能&#xff0c;可直接通过qai_hub获…

代码随想录算法训练营第55天| Leetcode 583. 两个字符串的删除操作、Leetcode 72. 编辑距离

文章目录 Leetcode 583. 两个字符串的删除操作Leetcode 72. 编辑距离 Leetcode 583. 两个字符串的删除操作 题目链接&#xff1a;Leetcode 583. 两个字符串的删除操作 题目描述&#xff1a; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步…

Linux命令:wget命令

1 wget命令 1.1 简介 wget命令是一种常用的网络工具&#xff0c;用于从Web服务器下载文件。 wget命令基于HTTP、HTTPS和FTP协议从指定的URL下载文件。它可以在Linux和Unix系统的命令行中使用&#xff0c;并支持各种参数来定制下载行为。Wget也可以根据HTML、XHTML和CSS页面中…

JavaScript---lazyload图片懒加载处理_IntersectionObserver

IntersectionObserver API兼容性&#xff1a; 部分代码展示&#xff1a; // 懒加载处理const imgsElem document.querySelectorAll(img);const topElem document.querySelector(#top);// IntersectionObserverconst Observer new IntersectionObserver((entries, observer) …

Redis 大key和热key问题及处理

一、说说什么是Redis、及特点&#xff1f; Redis是一个基于内存存储数据运行并支持持久化、使用key/value形式存储的高性能的nosql数据库&#xff0c;适合用于存储频繁访问&#xff0c;数据量较小的场景下。 特点&#xff1a; 支持数据持久化&#xff1a;可以将内存中的数据保…

STL(C++)

STL&#xff1a;标准模板库&#xff0c;它提供了一系列实现了常见数据结构和算法的模板类和函数。 STL的六大组件 容器 用于存放数据 std::string&#xff1a;字符串类&#xff0c;类比容器 std::vector&#xff1a;单端动态数组。支持随机访问&#xff0c;适合频繁访问元素…

PWARL CTF and others

title: 一些复杂点的题目 date: 2024-03-09 16:05:24 tags: CTF 2024年3月9日 今日习题完成&#xff1a; 1.BUU [网鼎杯 2020 半决赛]AliceWebsite 2.[RoarCTF 2019]Online Proxy 3.[Polar CTF]到底给不给flag呢 4.网鼎杯 2020 总决赛]Game Exp [RoarCTF 2019]Online Proxy …

Java设计模式之代理模式

代理模式是 Java 中常用的设计模式之一&#xff0c;它通过引入一个代理对象来控制对实际对象的访问&#xff0c;从而实现对目标对象的间接访问和控制。代理模式可以用于多种场景&#xff0c;比如权限控制、延迟加载、日志记录等。 在 Java 中&#xff0c;代理模式通常分为静态…

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

&#x1f4d6; 前言&#xff1a;随着软件产业的发展&#xff0c;计算机应用逐步渗透到社会生活的各个角落&#xff0c;使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而&#xff0c;软件的规模越大、越复杂&#xf…

X64 页表结构

PML4&#xff08;Page Map Level 4&#xff09;是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构&#xff0c;由多个页目录表&#xff08;Page Directory Pointer Table&#xff0c;PDPT&#xff09;组成&#xff0c;每个PDPT有512个指向下一级页表…

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)

Hololens 2应用开发系列&#xff08;3&#xff09;——MRTK基础知识及配置文件配置&#xff08;中&#xff09; 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者&#xff08;Input Data Providers&#xff09;2.3 输入动作&#xff08;Input Actions&#xff09;2…

Date类型及dayjs的使用总结

一、Date() Date数据类型用于处理日期和时间&#xff0c;它可以表示自1970年1月1日00:00:00 UTC&#xff08;Coordinated Universal Time&#xff0c;国际协调时间&#xff09;以来的毫秒数。 1.创建Date对象 例如&#xff1a;Tue Oct 31 2023 14:01:33 GMT0800 (中国标准时…