目录
一、涉及到的知识点
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*/