C#使用自定义的方法设计二叉树类及其方法

目录

一、涉及到的知识点

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/732029.shtml

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

相关文章

Web APIs 5 Window对象、本地存储

Web APIs 5 一、Window对象1、BOM2、定时器-延时函数3、JS执行机制4、location对象案例&#xff1a;5秒钟之后跳转的页面 5、navigator对象6、histroy对象 二、本地存储本地存储 localStorage本地存储 sessionStorage存储复杂数据类型案例&#xff1a;学生就业统计表字符串拼接…

html css 导航栏 2

鼠标划过会向上移动改变颜色 html文件 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>导航栏</title><link rel"stylesheet" href"css/dhl1.css" /></head><body><div …

动态规划(带你了解 原理 实践)

目录 引言 一、动态规划的基本概念 二、动态规划的应用 1. 背包问题 2. 最短路径问题 3. 0-1背包问题的变种 4. 字符串匹配与编辑距离 5. 金融投资组合优化 6. 生产调度问题 7. 项目管理中的资源分配 三、动态规划算法的优缺点 优点 1 效率高 2 通用性强 缺点&a…

Java高频面试之消息队列与分布式篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 消息队列的基本作用&#xff1f; 异步通信&#xff1a;消息队列提供了异步通信的能力&#xff0c;发送方可以将消息发送到队列中&#xff0c;而无需等待接收方立即处理。发送方和接收方可以解耦&#x…

排序——希尔排序、插入排序

本节复习排序中的希尔排序&#xff0c;希尔排序属于插入排序。 希尔排序的代码和插入排序非常类似。 思想却相对于插入排序来说复杂。 在复习希尔排序之前&#xff0c; 我们需要先复习一下插入排序。 目录 插入排序 插入过程 代码实现 希尔排序 希尔排序的思想 代码实…

蓝桥杯之【01背包模版】牛客例题展示

牛客链接 #include <bits/stdc.h> using namespace std; int n,V; const int N1010; int v[N],w[N]; int dp[N][N]; int main() {cin>>n>>V;for(int i1;i<n;i){cin>>v[i]>>w[i];}for(int i1;i<n;i){for(int j1;j<V;j){dp[i][j]dp[i-1][…

Svg Flow Editor 原生svg流程图编辑器(一)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;二&#xff09; 效果展示 项目概述 svg flow editor 是一款流程图编辑器&#xff0c;提供了一系列流程图交互、编辑所必需的功能&#xff0c;支持前端研发自定义开发各种逻辑编排场景&#xff0c;如流程图、ER 图、…

【xv6操作系统】Lab systems calls

一、实验前须知 阅读 xv6 文档的第 2 章和第 4 章的 4.3 节和 4.4 节以及相关源文件&#xff1a; 系统调用的用户空间代码在 user/user.h 和 user/usys.pl 中。 内核空间代码在 kernel/syscall.h 和 kernel/syscall.c 中。 与进程相关的代码在 kernel/proc.h 和 kernel/proc.c…

for语句的实际应用(3)

3145&#xff1a;【例24.3】 奇数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 9847 通过数: 5442 【题目描述】 计算非负整数 m 到 n&#xff08;包括 m 和 n&#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且 n 不大…

CorelDRAW Standard2024适合业余爱好者和家庭企业的图形设计软件

CorelDRAW Standard 2024是一款功能强大的矢量图形设计软件&#xff0c;专为图形爱好者、家庭用户、微型企业和学生们设计。该软件在Windows平台上运行&#xff0c;并提供了智能对象、布局、插图和模板等功能&#xff0c;帮助用户快速创建高质量的设计作品。 CorelDRAW Standa…

如何快速解决leetcode 热题100

刷LeetCode 100题&#xff1a;高效攻略与实操步骤 在编程和算法领域&#xff0c;LeetCode 是一个极受欢迎的平台&#xff0c;它提供了大量的编程题目&#xff0c;帮助开发者提升编程技能和解决问题的能力。对于很多初学者和求职者来说&#xff0c;刷题是一个提高自己竞争力的有…

在 build.gradle.kts 添加 阿里云仓库

在 build.gradle.kts 添加 maven 仓库 使用 kotlin script DSL 配置 build.gradle.kts &#xff08;高版本移动到settings.gradle.kts&#xff09;时&#xff0c;添加 maven 仓库的方式如下&#xff1a; pluginManagement {repositories {maven {setUrl("https://maven.a…

【CMake】顶层 CMakeList.txt 常用命令总结

文章目录 1. cmake_minimum_required1.1. 简介1.2. 使用案例1.2.1. 执行构建的cmake版本低于<min>1.2.2. 设置<policy_max>1.2.2.1. <policy_max>低于<min>1.2.2.2. <policy_max>大于等于<min> 1. cmake_minimum_required 1.1. 简介 功能…

图机器学习(4)-面向连接层面的人工特征工程

0 问题定义 通过已经连接去猜未知连接&#xff1a; 有两个思路&#xff1a; &#xff08;1&#xff09;直接提取link的特征&#xff0c;把link变成D维向量&#xff1b; &#xff08;2&#xff09;把link两端节点的D维向量拼在一起&#xff0c;缺点&#xff1a;丢失了link本身…

【C++】手撕string类(超实用!)

前言 一、标准库中的string类 1.1 string类介绍 1.2 string的常用接口 1.2.1 常用的构造函数 1.2.2 容量操作接口 &#xff08;1&#xff09;size &#xff08;2&#xff09;capacity &#xff08;3&#xff09;empty &#xff08;4&#xff09;clear &#xff08…

MySQL 学习笔记(基础篇 Day3)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. MySQL 学习笔记&#xff08;基础篇 Day1&#xff09; 2. MySQL 学习笔记&#xff08…

移掉 K 位数字(LeetCode 402)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路4.1 暴力法4.2 贪心 单调栈 参考文献 1.问题描述 给你一个以字符串表示的非负整数 num 和一个整数 k&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的整数最小。请你以字符串形式返回这个最小的整数。 示例 1 …

chrome插件开发的几种展现页面形式,3分钟看完

想要开发一个chrome浏览器插件&#xff0c;还是很有必要清楚插件都可以在哪些地方显示出来的&#xff0c;比如只想在pop页面弹出&#xff0c;还是添加右键菜单&#xff0c;还是提示桌面通知&#xff1f;还是在哪里展示&#xff1f;有哪些展示方式等 browserAction(浏览器右上角…

《C语言缺陷和陷阱》-笔记(1)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、和 1. 2. 二、&和 | &&和|| 二、复合操作符 三、字符串和字符 前言 在这一节中&#xff0c;我们将探索对记号的意义的普遍的误解以及记号和…

原油数据处理:1.聚类、盐含量测定与近红外光谱快速评估

一、原油种类的聚类分析 在塔里木盆地塔河油田的原油处理过程中&#xff0c;需要对原油进行地球化学特征研究&#xff0c;以了解其成因和特征。根据地球化学手段的综合研究结果&#xff0c;塔河油田奥陶系原油属于海相沉积环境&#xff0c;成熟度较高&#xff0c;正构烷烃分布…