C#数据结构-二叉树-顺序存储结构
发布时间:2021-05-21 07:26:18 所属栏目:大数据 来源: https://www.jb51.cc
导读:什么是二叉树:每个树的节点只有两个子树的树形结构。 为什么使用顺序存储结构:使用数组存放满二叉树的各结点非常方便,可以根据一个结点的索引号很容易地推算出它的双亲、孩子、兄弟等结点的编号,从而对这些结点进行访问,这是一种存储二叉满二叉树或完全
什么是二叉树:每个树的节点只有两个子树的树形结构。 为什么使用顺序存储结构:使用数组存放满二叉树的各结点非常方便,可以根据一个结点的索引号很容易地推算出它的双亲、孩子、兄弟等结点的编号,从而对这些结点进行访问,这是一种存储二叉满二叉树或完全二叉树的最简单、最省空间的做法。 /// <summary> /// 顺序存储二叉树 </summary> public class SequentialStorageBinaryTree<T> { <summary> 用于存储节点的数组 </summary> private T[] data; 节点数 private int count; public SequentialStorageBinaryTree(T[] arr = null) { if (arr == ) data = new T[0]; else data = arr; count = data.Length; } 增加 </summary> <param name="item"></param> bool Add(T item) { List<T> list = data.ToList<T>(); list.Add(item); data = list.ToArray(); count = data.Length; return true; } } 通过数组存储结构为: ? 1、层次遍历 层次遍历 void LevelTraversal() { for (int i = 0; i < count; i++) { Console.Write(data[i] + " "); } } ? 2、先序遍历 先序遍历 </summary> <param name="index"></param> void PreorderTraversal(int index =) { //递归的终止条件 if (index >= count || index <) return; int number = index + 1; Console.Write(data[index] + ); int leftIndex = number * 2;做节点 int rightIndex = number * 2 + ; PreorderTraversal(leftIndex - ); PreorderTraversal(rightIndex - ); } ? ?3、中序遍历 中序遍历 void MiddlePrefaceTraversal(int index = if (index >= count || index < ; ; MiddlePrefaceTraversal(leftIndex - ); Console.Write(data[index] + ); MiddlePrefaceTraversal(rightIndex - ); } ? ? 4、后续遍历 后序遍历 void AfterwordTraversal(; AfterwordTraversal(leftIndex - ); AfterwordTraversal(rightIndex - ); } ? ?现在我们测试下: SequentialStorageBinaryTree<string> bTree = new SequentialStorageBinaryTree<string>(); bTree.Add("A); bTree.Add(BCDEFG); 先序遍历 Console.Write(先序遍历:); bTree.PreorderTraversal(); Console.WriteLine(); 中序遍历 Console.Write(中序遍历:); bTree.MiddlePrefaceTraversal(); Console.WriteLine(); 后序遍历:); bTree.AfterwordTraversal(); Console.WriteLine(); 层次遍历 Console.Write(层次遍历:); bTree.LevelTraversal(); Console.ReadKey(); 输出: ? ? ? ? ? ? (编辑:北几岛) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |