C#二叉树遍历算法实现浅析
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
以下是整个二叉遍历算法解决方案的代码:
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace structure
- {
- class Program
- {
- #region 二叉树结点数据结构的定义
- //二叉树结点数据结构包括数据域,左右结点以及父结点成员;
- class nodes﹤T﹥
- {
- T data;
- nodes﹤T﹥ Lnode, Rnode, Pnode;
- public T Data
- {
- set { data = value; }
- get { return data; }
- }
- public nodes﹤T﹥ LNode
- {
- set { Lnode = value; }
- get { return Lnode; }
- }
- public nodes﹤T﹥ RNode
- {
- set { Rnode = value; }
- get { return Rnode; }
- }
- public nodes﹤T﹥ PNode
- {
- set { Pnode = value; }
- get { return Pnode; }
- }
- public nodes()
- { }
- public nodes(T data)
- {
- this.data = data;
- }
- }
- #endregion
- #region 先序编历二叉树
- static void PreOrder﹤T﹥(nodes﹤T﹥ rootNode)
- {
- if (rootNode != null)
- {
- Console.WriteLine(rootNode.Data);
- PreOrder﹤T﹥(rootNode.LNode);
- PreOrder﹤T﹥(rootNode.RNode);
- }
- }
- #endregion
- #region 构造一棵已知的二叉树
- static nodes﹤string﹥ BinTree()
- {
- nodes﹤string﹥[] binTree = new nodes﹤string﹥[8];
- //创建结点
- binTree[0] = new nodes﹤string﹥("A");
- binTree[1] = new nodes﹤string﹥("B");
- binTree[2] = new nodes﹤string﹥("C");
- binTree[3] = new nodes﹤string﹥("D");
- binTree[4] = new nodes﹤string﹥("E");
- binTree[5] = new nodes﹤string﹥("F");
- binTree[6] = new nodes﹤string﹥("G");
- binTree[7] = new nodes﹤string﹥("H");
- //使用层次遍历二叉树的思想,构造一个已知的二叉树
- binTree[0].LNode = binTree[1];
- binTree[0].RNode = binTree[2];
- binTree[1].RNode = binTree[3];
- binTree[2].LNode = binTree[4];
- binTree[2].RNode = binTree[5];
- binTree[3].LNode = binTree[6];
- binTree[3].RNode = binTree[7];
- //返回二叉树的根结点
- return binTree[0];
- }
- #endregion
- #region 中序遍历二叉树
- static void MidOrder﹤T﹥(nodes﹤T﹥ rootNode)
- {
- if (rootNode != null)
- {
- MidOrder﹤T﹥(rootNode.LNode);
- Console.WriteLine(rootNode.Data);
- MidOrder﹤T﹥(rootNode.RNode);
- }
- }
- #endregion
- 后序遍历二叉树#region 后序遍历二叉树
- static void AfterOrder﹤T﹥(nodes﹤T﹥ rootNode)
- {
- if (rootNode != null)
- {
- AfterOrder﹤T﹥(rootNode.LNode);
- AfterOrder﹤T﹥(rootNode.RNode);
- Console.WriteLine(rootNode.Data);
- }
- }
- #endregion
- #region 层次遍历二叉树
- static void LayerOrder﹤T﹥(nodes﹤T﹥ rootNode)
- {
- nodes﹤T﹥[] Nodes = new nodes﹤T﹥[20];
- int front = -1;
- int rear = -1;
- if (rootNode != null)
- {
- rear++;
- Nodes[rear] = rootNode;
- }
- while (front != rear)
- {
- front++;
- rootNode = Nodes[front];
- Console.WriteLine(rootNode.Data);
- if (rootNode.LNode != null)
- {
- rear++;
- Nodes[rear] = rootNode.LNode;
- }
- if (rootNode.RNode != null)
- {
- rear++;
- Nodes[rear] = rootNode.RNode;
- }
- }
- }
- #endregion
- #region 测试的主方法
- static void Main(string[] args)
- {
- nodes﹤string﹥ rootNode = BinTree();
- Console.WriteLine("先序遍历方法遍历二叉树:");
- PreOrder﹤string﹥(rootNode);
- Console.WriteLine("中序遍历方法遍历二叉树:");
- MidOrder﹤string﹥(rootNode);
- Console.WriteLine("后序遍历方法遍历二叉树:");
- AfterOrder﹤string﹥(rootNode);
- Console.WriteLine("层次遍历方法遍历二叉树:");
- LayerOrder﹤string﹥(rootNode);
- Console.Read();
- }
- #endregion
- }
- }
C#二叉树遍历算法实现就向你介绍到这里,希望通过对C#二叉树遍历算法实现的讲解使你对C#算法有了一些认识。
转载于:https://www.cnblogs.com/lmule/archive/2010/08/18/1802829.html
C#二叉树遍历算法实现浅析相关推荐
- 基于计数栈的非递归二叉树遍历算法
转载请保留完整信息! 作者:中山大学 赵耀 10389332 创作时间:2013.11.25 发表时间:2013.12.11 背景 遍历算法一般可按深度优先或广度优先进行.对于二叉树,深度优先遍历可分 ...
- 【树】二叉树遍历算法(深度优先、广度优先遍历,前序、中序、后序、层次)及Java实现...
[树]二叉树遍历算法(深度优先.广度优先遍历,前序.中序.后序.层次)及Java实现 目录 一.前序遍历 二.中序遍历 三.后序遍历 四.层次遍历 遍历的作用 二叉树是一种非常重要的数据结构,很多其它 ...
- 二叉树遍历算法详解(递归法+非递归法)
二叉树遍历算法详解 在上一篇C语言实现二叉树中有提到对于二叉树的遍历,包括前序,中序和后续遍历,以及层次遍历 大家已经熟悉了二叉树的前中后序遍历过程,大部分都采用了递归的思想来实现 在leetcode ...
- 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)
//二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...
- python二叉树遍历算法_分享python实现的二叉树定义与遍历
这篇文章主要介绍了python实现的二叉树定义与遍历算法,结合具体实例形式分析了基于Python定义的二叉树及其常用遍历操作实现技巧,需要的朋友可以参考下 本文实例讲述了python实现的二叉树定义与 ...
- [zhuan]二叉树遍历算法实现(C#2.0)
本人用C#2.0实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)遍历二叉树.希望能给有需要人带来帮助,也希望能得到大家的指点.有关C#数据结构的书在书店里找到, ...
- 二叉树遍历算法之一:前序遍历
递归实现前序遍历 二叉树的前序遍历是指从根节点出发,按照先根节点,再左子树,后右子树的方法遍历二叉树中的所有节点,使得每个节点都被访问一次. 当调用遍历算法的时候前序遍历的具体过程如下: 首先访问根节 ...
- 数据结构--二叉树遍历算法的应用
文章目录 查询二叉树中的某个节点 统计二叉树中叶子节点的个数 参数形式 全局变量形式 返回值形式 求二叉树的深度(后序遍历) 复制二叉树(后续遍历) 层次遍历二叉树 总结 查询二叉树中的某个节点 在二 ...
- 二叉树遍历算法的六种c语言实现 递归与非递归
二叉树遍历分为三种: 先序遍历:先访问根结点,其次左节点,最后右节点 中序遍历:先访问左结点,其次跟节点,最后右节点 后序遍历:先访问左结点,其次右节点,最后根节点 三种遍历的递归算法实现形式类似,仅 ...
最新文章
- PMP-【第4章 项目整合管理】-2021-1-18(88页-115页)
- Linux查看ssd块大小性能,如何衡量Linux中对SSD执行的总写入量?
- 数据结构哪本书比较好_东莞工厂电动伸缩门固定在哪一边比较好?
- 【小白学PyTorch】7.最新版本torchvision.transforms常用API翻译与讲解
- 运行中的Nginx进程间的关系
- Linux 文件目录特殊权限设定(SUID,SGID,SBIT)
- 图谱实战 | 基于半结构化百科的电影KG构建、查询与推理实践记录
- C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
- JSP中文件上传的关键步骤
- PSQL容器带脚本初始化
- JavaSE基础——网络编程
- TestCenter测试管理工具功能详解一(F)
- fb静态区域_FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤...
- 遍历HashMap中元素的三种方法
- vi、vim的使用 查找关键字命令(一文彻底搞懂)
- 《大学两年的摸爬滚打:新征程》
- 拨开发展迷雾,将“智慧”嵌入全业务场景【2022戴尔科技峰会预告】
- 试用了300款增长工具后,我们刚刚上线了这项服务
- 【Arduino】基于阿里云的体感手柄
- 【数字信号】基于DTMF双音多频电话拨号仿真(电话号码归属地匹配功附matlab代码...
热门文章
- linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
- jar docker镜像不能启线程_使用docker部署SpringCloud项目
- python用os.system打开wav文件_使用python读取wav格式文件
- python sort函数时间复杂度_STL用法及其时间复杂度分析
- 三维激光重建原理与实现HALCON
- go语言for的三种形式
- [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
- CSS 行内格式化上下文中的各种高度计算
- 11个Visual Studio代码性能分析工具
- Python 简介day01