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 }