C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历。希望能给有需要人带来帮助,也希望能得到大家的指点。有关C#数据结构的书在书店里找到,网上也是极少,如果你有好的学习资源别忘了告诉我。先谢了。数据结构对一个程序员来说,现在是太重要了,数据结构学得好的人,逻辑思维一定很强,在程序设计的时候,就不会觉得太费劲了。而且是在设计多层应用程序的时候,真是让人绞尽脑汁啊。趁自己还年轻,赶紧练练脑子。哈哈,咱们尽快进入主题吧。

本程序中将用到一棵已知的二叉树如图(二叉树图)所示。

下面简单介绍一下几种算法和思路:

◆C#二叉树遍历算法之先序遍历:

1.访问根结点

2.按先序遍历左子树;

3.按先序遍历右子树;

4.例如:遍历已知二叉树结果为:A-﹥B-﹥D-﹥G-﹥H-﹥C-﹥E-﹥F

◆C#二叉树遍历算法之中序遍历:

1.按中序遍历左子树;

2.访问根结点;

3.按中序遍历右子树;

4.例如遍历已知二叉树的结果:B-﹥G-﹥D-﹥H-﹥A-﹥E-﹥C-﹥F

◆C#二叉树遍历算法之后序遍历:

1.按后序遍历左子树;

2.按后序遍历右子树;

3.访问根结点;

4.例如遍历已知二叉树的结果:G-﹥H-﹥D-﹥B-﹥E-﹥F-﹥C-﹥A

◆C#二叉树遍历算法之层次遍历:

1.从上到下,从左到右遍历二叉树的各个结点(实现时需要借辅助容器);

2.例如遍历已知二叉树的结果:A-﹥B-﹥C-﹥D-﹥E-﹥F-﹥G-﹥H

以下是整个二叉遍历算法解决方案的代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace structure
  5. {
  6. class Program
  7. {
  8. #region 二叉树结点数据结构的定义
  9. //二叉树结点数据结构包括数据域,左右结点以及父结点成员;
  10. class nodes﹤T﹥
  11. {
  12. T data;
  13. nodes﹤T﹥ Lnode, Rnode, Pnode;
  14. public T Data
  15. {
  16. set { data = value; }
  17. get { return data; }
  18. }
  19. public nodes﹤T﹥ LNode
  20. {
  21. set { Lnode = value; }
  22. get { return Lnode; }
  23. }
  24. public nodes﹤T﹥ RNode
  25. {
  26. set { Rnode = value; }
  27. get { return Rnode; }
  28. }
  29. public nodes﹤T﹥ PNode
  30. {
  31. set { Pnode = value; }
  32. get { return Pnode; }
  33. }
  34. public nodes()
  35. { }
  36. public nodes(T data)
  37. {
  38. this.data = data;
  39. }
  40. }
  41. #endregion
  42. #region 先序编历二叉树
  43. static void PreOrder﹤T﹥(nodes﹤T﹥ rootNode)
  44. {
  45. if (rootNode != null)
  46. {
  47. Console.WriteLine(rootNode.Data);
  48. PreOrder﹤T﹥(rootNode.LNode);
  49. PreOrder﹤T﹥(rootNode.RNode);
  50. }
  51. }
  52. #endregion
  53. #region 构造一棵已知的二叉树
  54. static nodes﹤string﹥ BinTree()
  55. {
  56. nodes﹤string﹥[] binTree = new nodes﹤string﹥[8];
  57. //创建结点
  58. binTree[0] = new nodes﹤string﹥("A");
  59. binTree[1] = new nodes﹤string﹥("B");
  60. binTree[2] = new nodes﹤string﹥("C");
  61. binTree[3] = new nodes﹤string﹥("D");
  62. binTree[4] = new nodes﹤string﹥("E");
  63. binTree[5] = new nodes﹤string﹥("F");
  64. binTree[6] = new nodes﹤string﹥("G");
  65. binTree[7] = new nodes﹤string﹥("H");
  66. //使用层次遍历二叉树的思想,构造一个已知的二叉树
  67. binTree[0].LNode = binTree[1];
  68. binTree[0].RNode = binTree[2];
  69. binTree[1].RNode = binTree[3];
  70. binTree[2].LNode = binTree[4];
  71. binTree[2].RNode = binTree[5];
  72. binTree[3].LNode = binTree[6];
  73. binTree[3].RNode = binTree[7];
  74. //返回二叉树的根结点
  75. return binTree[0];
  76. }
  77. #endregion
  78. #region 中序遍历二叉树
  79. static void MidOrder﹤T﹥(nodes﹤T﹥ rootNode)
  80. {
  81. if (rootNode != null)
  82. {
  83. MidOrder﹤T﹥(rootNode.LNode);
  84. Console.WriteLine(rootNode.Data);
  85. MidOrder﹤T﹥(rootNode.RNode);
  86. }
  87. }
  88. #endregion
  89. 后序遍历二叉树#region 后序遍历二叉树
  90. static void AfterOrder﹤T﹥(nodes﹤T﹥ rootNode)
  91. {
  92. if (rootNode != null)
  93. {
  94. AfterOrder﹤T﹥(rootNode.LNode);
  95. AfterOrder﹤T﹥(rootNode.RNode);
  96. Console.WriteLine(rootNode.Data);
  97. }
  98. }
  99. #endregion
  100. #region 层次遍历二叉树
  101. static void LayerOrder﹤T﹥(nodes﹤T﹥ rootNode)
  102. {
  103. nodes﹤T﹥[] Nodes = new nodes﹤T﹥[20];
  104. int front = -1;
  105. int rear = -1;
  106. if (rootNode != null)
  107. {
  108. rear++;
  109. Nodes[rear] = rootNode;
  110. }
  111. while (front != rear)
  112. {
  113. front++;
  114. rootNode = Nodes[front];
  115. Console.WriteLine(rootNode.Data);
  116. if (rootNode.LNode != null)
  117. {
  118. rear++;
  119. Nodes[rear] = rootNode.LNode;
  120. }
  121. if (rootNode.RNode != null)
  122. {
  123. rear++;
  124. Nodes[rear] = rootNode.RNode;
  125. }
  126. }
  127. }
  128. #endregion
  129. #region 测试的主方法
  130. static void Main(string[] args)
  131. {
  132. nodes﹤string﹥ rootNode = BinTree();
  133. Console.WriteLine("先序遍历方法遍历二叉树:");
  134. PreOrder﹤string﹥(rootNode);
  135. Console.WriteLine("中序遍历方法遍历二叉树:");
  136. MidOrder﹤string﹥(rootNode);
  137. Console.WriteLine("后序遍历方法遍历二叉树:");
  138. AfterOrder﹤string﹥(rootNode);
  139. Console.WriteLine("层次遍历方法遍历二叉树:");
  140. LayerOrder﹤string﹥(rootNode);
  141. Console.Read();
  142. }
  143. #endregion
  144. }
  145. }

C#二叉树遍历算法实现就向你介绍到这里,希望通过对C#二叉树遍历算法实现的讲解使你对C#算法有了一些认识。

转载于:https://www.cnblogs.com/lmule/archive/2010/08/18/1802829.html

C#二叉树遍历算法实现浅析相关推荐

  1. 基于计数栈的非递归二叉树遍历算法

    转载请保留完整信息! 作者:中山大学 赵耀 10389332 创作时间:2013.11.25 发表时间:2013.12.11 背景 遍历算法一般可按深度优先或广度优先进行.对于二叉树,深度优先遍历可分 ...

  2. 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...

    [树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...

  3. 二叉树遍历算法详解(递归法+非递归法)

    二叉树遍历算法详解 在上一篇C语言实现二叉树中有提到对于二叉树的遍历,包括前序,中序和后续遍历,以及层次遍历 大家已经熟悉了二叉树的前中后序遍历过程,大部分都采用了递归的思想来实现 在leetcode ...

  4. 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)

    //二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...

  5. python二叉树遍历算法_分享python实现的二叉树定义与遍历

    这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下 本文实例讲述了python实现的二叉树定义与 ...

  6. [zhuan]二叉树遍历算法实现(C#2.0)

    本人用C#2.0实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)遍历二叉树.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...

  7. 二叉树遍历算法之一:前序遍历

    递归实现前序遍历 二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次. 当调用遍历算法的时候前序遍历的具体过程如下: 首先访问根节 ...

  8. 数据结构--二叉树遍历算法的应用

    文章目录 查询二叉树中的某个节点 统计二叉树中叶子节点的个数 参数形式 全局变量形式 返回值形式 求二叉树的深度(后序遍历) 复制二叉树(后续遍历) 层次遍历二叉树 总结 查询二叉树中的某个节点 在二 ...

  9. 二叉树遍历算法的六种c语言实现 递归与非递归

    二叉树遍历分为三种: 先序遍历:先访问根结点,其次左节点,最后右节点 中序遍历:先访问左结点,其次跟节点,最后右节点 后序遍历:先访问左结点,其次右节点,最后根节点 三种遍历的递归算法实现形式类似,仅 ...

最新文章

  1. PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)
  2. Linux查看ssd块大小性能,如何衡量Linux中对SSD执行的总写入量?
  3. 数据结构哪本书比较好_东莞工厂电动伸缩门固定在哪一边比较好?
  4. 【小白学PyTorch】7.最新版本torchvision.transforms常用API翻译与讲解
  5. 运行中的Nginx进程间的关系
  6. Linux 文件目录特殊权限设定(SUID,SGID,SBIT)
  7. 图谱实战 | 基于半结构化百科的电影KG构建、查询与推理实践记录
  8. C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
  9. JSP中文件上传的关键步骤
  10. PSQL容器带脚本初始化
  11. JavaSE基础——网络编程
  12. TestCenter测试管理工具功能详解一(F)
  13. fb静态区域_FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤...
  14. 遍历HashMap中元素的三种方法
  15. vi、vim的使用 查找关键字命令(一文彻底搞懂)
  16. 《大学两年的摸爬滚打:新征程》
  17. 拨开发展迷雾,将“智慧”嵌入全业务场景【2022戴尔科技峰会预告】
  18. 试用了300款增长工具后,我们刚刚上线了这项服务
  19. 【Arduino】基于阿里云的体感手柄
  20. 【数字信号】基于DTMF双音多频电话拨号仿真(电话号码归属地匹配功附matlab代码...

热门文章

  1. linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
  2. jar docker镜像不能启线程_使用docker部署SpringCloud项目
  3. python用os.system打开wav文件_使用python读取wav格式文件
  4. python sort函数时间复杂度_STL用法及其时间复杂度分析
  5. 三维激光重建原理与实现HALCON
  6. go语言for的三种形式
  7. [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
  8. CSS 行内格式化上下文中的各种高度计算
  9. 11个Visual Studio代码性能分析工具
  10. Python 简介day01