C#二叉树遍历算法实现浅析

开发 后端 算法
C#二叉树遍历算法实现主要向你介绍了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  
    }  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.

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

【编辑推荐】

  1. C#算法解决的一道面试题
  2. C#算法实现字符串反转浅析
  3. C#算法解决萝卜地问题
  4. C#九九乘法表的实现浅析
  5. C#算法应用之高斯消元法实现
责任编辑:仲衡 来源: cnblogs
相关推荐

2020-04-27 07:05:58

二叉树左子树右子树

2021-09-15 07:56:32

二叉树层次遍历

2024-01-23 12:54:00

C++编程语言代码

2021-04-20 08:37:14

数据结构二叉树

2009-05-27 09:38:32

C#二叉树

2021-01-13 10:03:36

二叉树层序遍历层次遍历

2022-10-26 23:58:02

二叉树数组算法

2023-05-08 15:57:16

二叉树数据结构

2013-07-15 16:35:55

二叉树迭代器

2021-09-29 10:19:00

算法平衡二叉树

2020-09-23 18:25:40

算法二叉树多叉树

2020-12-22 08:56:51

JavaScript数据结构前端

2021-09-15 07:40:50

二叉树数据结构算法

2020-12-30 08:35:34

贪心算法监控

2021-09-28 06:28:51

二叉树公共祖先

2021-04-19 07:47:42

数据结构二叉树Tree

2021-03-17 08:19:22

二叉树LeetCode

2021-04-28 20:12:27

数据结构创建

2021-07-13 11:32:41

二叉树数据结构算法

2020-11-02 09:15:47

算法与数据结构
点赞
收藏

51CTO技术栈公众号