二叉树的遍历

  1 //         A
  2 //     B      C
  3 //  D       E   F
  4 //G  H  
  5 //先序:A-B-D-G-H-C-E-F
  6 //中序:B-G-D-H-A-E-C-F
  7 //后序:G-H-D-B-E-F-C-A
  8 //层级:A-B-C-D-E-F-G-H
  9 using System;
 10 using System.Collections.Generic;
 11 using System.Linq;
 12 using System.Text;
 13 using System.Threading.Tasks;
 14 
 15 namespace Tree
 16 {
 17     class Nodes<T> 
 18     {
 19         T data;
 20         Nodes<T> Lnode, Rnode, Pnode;
 21 
 22         public T Data
 23         {
 24             set { data = value; }
 25             get { return data; }
 26         }
 27 
 28         public Nodes<T> LNode
 29         {
 30             set { Lnode = value; }
 31             get { return Lnode; }
 32         }
 33 
 34         public Nodes<T> RNode
 35         {
 36             set { Rnode = value; }
 37             get { return Rnode; }
 38         }
 39 
 40         public Nodes<T> PNode
 41         {
 42             set { Pnode = value; }
 43             get { return Pnode; }
 44         }
 45 
 46         public Nodes() 
 47         {
 48 
 49         }
 50         public Nodes(T data) 
 51         {
 52             this.data = data;
 53         }
 54 
 55       
 56     }
 57 
 58   
 59     class Program
 60     {
 61         static void Main(string[] args)
 62         {
 63             Nodes<string> rootNode = BinTree();
 64             Console.WriteLine("先序遍历方法遍历二叉树");
 65             PreOrder<string>(rootNode);
 66             Console.WriteLine("中序遍历方法遍历二叉树");
 67             MidOrder<string>(rootNode);
 68             Console.WriteLine("后序遍历方法遍历二叉树");
 69             AfterOrder<string>(rootNode);
 70             Console.WriteLine("层级遍历方法遍历二叉树");
 71             LayerOrde<string>(rootNode);
 72             Console.Read();
 73         }
 74 
 75         //先序遍历二叉树
 76         static void PreOrder<T>(Nodes<T> rootNode)
 77         {
 78             if (rootNode != null)
 79             {
 80                 Console.WriteLine(rootNode.Data);
 81                 PreOrder<T>(rootNode.LNode);
 82                 PreOrder<T>(rootNode.RNode);
 83             }
 84         }
 85         //创建树
 86         static Nodes<string> BinTree()
 87         {
 88             Nodes<string>[] binTree = new Nodes<string>[8];
 89             binTree[0] = new Nodes<string>("A");
 90             binTree[1] = new Nodes<string>("B");
 91             binTree[2] = new Nodes<string>("C");
 92             binTree[3] = new Nodes<string>("D");
 93             binTree[4] = new Nodes<string>("E");
 94             binTree[5] = new Nodes<string>("F");
 95             binTree[6] = new Nodes<string>("G");
 96             binTree[7] = new Nodes<string>("H");
 97 
 98             binTree[0].LNode = binTree[1];
 99             binTree[0].RNode = binTree[2];
100 
101             binTree[1].RNode = binTree[3];
102             binTree[2].LNode = binTree[4];
103             binTree[2].RNode = binTree[5];
104             binTree[3].LNode = binTree[6];
105             binTree[3].RNode = binTree[7];
106             return binTree[0];
107         }
108         //中序遍历二叉树
109         static void MidOrder<T>(Nodes<T> rootNode)
110         {
111             if (rootNode != null)
112             {
113                 MidOrder<T>(rootNode.LNode);
114                 Console.WriteLine(rootNode.Data);
115                 MidOrder<T>(rootNode.RNode);
116             }
117         }
118         //后序二叉树
119         static void AfterOrder<T>(Nodes<T> rootNode)
120         {
121             if (rootNode != null)
122             {
123                 AfterOrder<T>(rootNode.LNode);
124                 AfterOrder<T>(rootNode.RNode);
125 
126                 Console.WriteLine(rootNode.Data);
127             }
128         }
129         //层级二叉树
130         static void LayerOrde<T>(Nodes<T> rootNode)
131         {
132             Nodes<T>[] nodes = new Nodes<T>[20];
133             int front = -1;
134             int rear = -1;
135 
136             if (rootNode != null)
137             {
138                 rear++;
139                 nodes[rear] = rootNode;
140             }
141             while (front != rear)
142             {
143                 front++;
144                 rootNode = nodes[front];
145 
146                 Console.WriteLine(rootNode.Data);
147                 if (rootNode.LNode != null)
148                 {
149                     rear++;
150                     nodes[rear] = rootNode.LNode;
151                 }
152                 if (rootNode.RNode != null) 
153                 {
154                     rear++;
155                     nodes[rear] = rootNode.RNode;
156                 }
157             }
158            
159         }
160     }
161 }

 

posted @ 2014-07-07 14:10  kadajEvo  阅读(117)  评论(0)    收藏  举报