• 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();
            }
    
        }
    }
    


     

  • 相关阅读:
    Oracle VM VirtualBox安装centos8
    HTML5 离线缓存manifest
    ES6 Proxy函数和对象的增强
    ES6 Map数据结构
    ES6 Set和WeakSet
    ES6Symbol在对象中的应用
    ==,===,与ES6中is()的区别
    ES6对象操作
    ES6函数和数组补漏
    ES6箭头函数
  • 原文地址:https://www.cnblogs.com/voidobject/p/3975487.html
Copyright © 2020-2023  润新知