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();
            }
    
        }
    }
  • 相关阅读:
    残疾流浪歌手的令人陶醉的声音
    关于浏览器参数的获取
    项目开发文档模板
    scoped_ptr源码
    从逗号分隔的字符串中删除某个子串的js函数
    合并两个数组的js函数
    comutil.h移值(_com_error,_bstr_t,_variant_t类的移值)
    判断两个对象是否相等的js函数
    托管可执行文件的结构(The Structure of a Managed Executable File)
    访问cookie的js函数
  • 原文地址:https://www.cnblogs.com/wangchuang/p/5423940.html
Copyright © 2011-2022 走看看