本程序中将用到一棵已知的二叉树如图(二叉树图)所示。


Code
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace ConsoleApplication1
6

{
7
class Program
8
{
9
10
11
二叉树结点数据结构的定义#region 二叉树结点数据结构的定义
12
//二叉树结点数据结构包括数据域,左右结点以及父结点成员;
13
class nodes<T>
14
{
15
T data;
16
nodes<T> Lnode, Rnode, Pnode;
17
public T Data
18
{
19
set
{ data = value; }
20
get
{ return data; }
21
22
}
23
public nodes<T> LNode
24
{
25
set
{ Lnode = value; }
26
get
{ return Lnode; }
27
}
28
public nodes<T> RNode
29
{
30
set
{ Rnode = value; }
31
get
{ return Rnode; }
32
33
}
34
35
public nodes<T> PNode
36
{
37
set
{ Pnode = value; }
38
get
{ return Pnode; }
39
40
}
41
public nodes()
42
{ }
43
public nodes(T data)
44
{
45
this.data = data;
46
}
47
48
}
49
#endregion
50
51
先序编历二叉树#region 先序编历二叉树
52
static void PreOrder<T>(nodes<T> rootNode)
53
{
54
if (rootNode != null)
55
{
56
Console.WriteLine(rootNode.Data);
57
PreOrder<T>(rootNode.LNode);
58
PreOrder<T>(rootNode.RNode);
59
60
}
61
}
62
63
#endregion
64
65
构造一棵已知的二叉树#region 构造一棵已知的二叉树
66
67
static nodes<string> BinTree()
68
{
69
nodes<string>[] binTree = new nodes<string>[8];
70
//创建结点
71
binTree[0] = new nodes<string>("A");
72
binTree[1] = new nodes<string>("B");
73
binTree[2] = new nodes<string>("C");
74
binTree[3] = new nodes<string>("D");
75
binTree[4] = new nodes<string>("E");
76
binTree[5] = new nodes<string>("F");
77
binTree[6] = new nodes<string>("G");
78
binTree[7] = new nodes<string>("H");
79
//使用层次遍历二叉树的思想,构造一个已知的二叉树
80
81
binTree[0].LNode = binTree[1];
82
binTree[0].RNode = binTree[2];
83
binTree[1].RNode = binTree[3];
84
binTree[2].LNode = binTree[4];
85
binTree[2].RNode = binTree[5];
86
binTree[3].LNode = binTree[6];
87
binTree[3].RNode = binTree[7];
88
//返回二叉树的根结点
89
return binTree[0];
90
91
92
93
}
94
#endregion
95
96
中序遍历二叉树#region 中序遍历二叉树
97
static void MidOrder<T>(nodes<T> rootNode)
98
{
99
if (rootNode != null)
100
{
101
MidOrder<T>(rootNode.LNode);
102
Console.WriteLine(rootNode.Data);
103
MidOrder<T>(rootNode.RNode);
104
}
105
}
106
#endregion
107
108
后序遍历二叉树#region 后序遍历二叉树
109
static void AfterOrder<T>(nodes<T> rootNode)
110
{
111
if (rootNode != null)
112
{
113
AfterOrder<T>(rootNode.LNode);
114
AfterOrder<T>(rootNode.RNode);
115
Console.WriteLine(rootNode.Data);
116
}
117
118
}
119
#endregion
120
121
层次遍历二叉树#region 层次遍历二叉树
122
static void LayerOrder<T>(nodes<T> rootNode)
123
{
124
nodes<T>[] Nodes = new nodes<T>[20];
125
int front = -1;
126
int rear = -1;
127
if (rootNode != null)
128
{
129
rear++;
130
Nodes[rear] = rootNode;
131
132
}
133
134
while (front != rear)
135
{
136
front++;
137
rootNode = Nodes[front];
138
Console.WriteLine(rootNode.Data);
139
if (rootNode.LNode != null)
140
{
141
rear++;
142
Nodes[rear] = rootNode.LNode;
143
}
144
if (rootNode.RNode != null)
145
{
146
rear++;
147
Nodes[rear] = rootNode.RNode;
148
}
149
}
150
}
151
152
#endregion
153
154
//测试的主方法#region 测试的主方法
155
static void Main(string[] args)
156
{
157
nodes<string> rootNode = BinTree();
158
159
Console.WriteLine("先序遍历方法遍历二叉树:");
160
PreOrder<string>(rootNode);
161
162
Console.WriteLine("中序遍历方法遍历二叉树:");
163
MidOrder<string>(rootNode);
164
165
Console.WriteLine("后序遍历方法遍历二叉树:");
166
AfterOrder<string>(rootNode);
167
168
169
Console.WriteLine("层次遍历方法遍历二叉树:");
170
LayerOrder<string>(rootNode);
171
172
173
Console.Read();
174
175
}
176
177
}
178
}
179
先序遍历:
1. 访问根结点
2. 按先序遍历左子树;
3. 按先序遍历右子树;
4. 例如:遍历已知二叉树结果为:A->B->D->G->H->C->E->F
中序遍历:
1. 按中序遍历左子树;
2. 访问根结点;
3. 按中序遍历右子树;
4. 例如遍历已知二叉树的结果:B->G->D->H->A->E->C->F
后序遍历:
1. 按后序遍历左子树;
2. 按后序遍历右子树;
3. 访问根结点;
4. 例如遍历已知二叉树的结果:G->H->D->B->E->F->C->A
层次遍历:
1. 从上到下,从左到右遍历二叉树的各个结点(实现时需要借辅助容器);
2. 例如遍历已知二叉树的结果:A->B->C->D->E->F->G->H


1

2

3

4

5

6



7

8



9

10

11


12

13

14



15

16

17

18



19



20



21

22

23

24



25



26



27

28

29



30



31



32

33

34

35

36



37



38



39

40

41

42



43

44



45

46

47

48

49

50

51


52

53



54

55



56

57

58

59

60

61

62

63

64

65


66

67

68



69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96


97

98



99

100



101

102

103

104

105

106

107

108


109

110



111

112



113

114

115

116

117

118

119

120

121


122

123



124

125

126

127

128



129

130

131

132

133

134

135



136

137

138

139

140



141

142

143

144

145



146

147

148

149

150

151

152

153

154

155

156



157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179
