using System ; using System.Collections.Generic; using System .Text; namespace structure { class Program { class nodes<T> { T data; nodes<T> Lnode,rnode,pnode; public T Data { get {return data;} set{data =value;} } public nodes<T>LNode { get {return Lnode ;} set {Lnode =value;} } public nodes<T>RNode { get {return rnode ;} set {rnode =value;} } public nodes<T>PNode { get {return pnode ;} set {pnode =value;} } public nodes(){} public nodes(T data) { this.data =data ; } } //构造一棵已知的二叉树 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 PreOrder<T>(nodes<T> rootNode) { if(rootNode !=null ) { Console.WriteLine(rootNode.Data); PreOrder <T>(rootNode.LNode ); PreOrder <T>(rootNode.RNode); } } //中序遍历二叉树 static void MidOrder<T>(nodes<T> rootNode) { if (rootNode != null) { MidOrder<T>(rootNode.LNode); Console.WriteLine(rootNode.Data); MidOrder<T>(rootNode.RNode); } } //后序遍历二叉树 static void AfterOrder<T>(nodes<T> rootNode) { if (rootNode != null) { AfterOrder<T>(rootNode.LNode); AfterOrder<T>(rootNode.RNode); Console.WriteLine(rootNode.Data); } } //层次遍历二叉树 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; } } } //测试的主方法 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(); } } }