zoukankan      html  css  js  c++  java
  • C#二叉树简易实例

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace ConsoleApplication1
    {
        class Program
        {
            public class nodes<T>
            {
                T data;
                nodes<T> Lnode, Rnode, Pnode;
    
                public T Data  //
                {
                    set { data = value; }
                    get { return data; }
                }
    
                public nodes<T> LNode //
                {
                    get { return Lnode; }
                    set { Lnode = value; }
                }
                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;
                }
    
                //先序遍历
                public static void PreOrder<T>(nodes<T> rootNode)
                {
                    if (rootNode != null)
                    {
                        Console.WriteLine(rootNode.Data);
                        PreOrder<T>(rootNode.LNode);
                        PreOrder<T>(rootNode.RNode);
                    }
                }
                //中序遍历二叉树
                public static void MidOrder<T>(nodes<T> rootNode)
                {
                    if (rootNode != null)
                    {
                        MidOrder<T>(rootNode.LNode);
                        Console.WriteLine(rootNode.Data);
                        MidOrder<T>(rootNode.RNode);
                    }
                }
    
                //后续遍历二叉树
                public static void AfterOrder<T>(nodes<T> rootNode)
                {
                    if (rootNode != null)
                    {
                        AfterOrder<T>(rootNode.LNode);
                        AfterOrder<T>(rootNode.RNode);
                        Console.WriteLine(rootNode.Data);
                    }
                }
                //层次遍历
                public 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;
                        }
                    }
                }
    
                //构造一颗已知的二叉树
               public  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];
                }
    
            }
            static void Main(string[] args)
            {
                nodes<string> rootNode = nodes<string>.BinTree();
    
                Console.WriteLine("先序遍历二叉树");
                nodes<string>.PreOrder(rootNode);
                Console.WriteLine("中序遍历二叉树");
                nodes<string>.MidOrder(rootNode);
                Console.WriteLine("后序遍历二叉树");
                nodes<string>.AfterOrder(rootNode);
                Console.WriteLine("层次遍历二叉树");
                nodes<string>.LayerOrder(rootNode);
                Console.Read();
            }
    
        }
    }
  • 相关阅读:
    SOA概念误解实施要点
    Visual Studio 2008 和 .NET Framework 3.5 Service Pack 1 Beta 发布
    【翻译】使用LINQ来简化编程的7个技巧
    我对SOA的认识以及心得
    《SQL Server 2005范例代码查询辞典》出版
    Security Tutorials系列文章以及AJAX系列文章
    代朋友发招聘信息,C++程序员
    二叉树相关算法
    最近项目的一些心得(纯贴代码)
    大型互联网网站架构心得之一:分
  • 原文地址:https://www.cnblogs.com/wangchuang/p/5423940.html
Copyright © 2011-2022 走看看