二叉树(C#数据结构四)
1
using System;
2
using System.Collections;
3
using System.Collections.Generic;
4
using System.Text;
5
6
namespace soloDatastruct
7
{
8
public class TNode<T> //树结点
9
{
10
public T data; //结点值
11
public TNode<T> left;//左孩子
12
public TNode<T> right; //右孩子
13
public TNode()
14
{
15
data =default(T);
16
left = null;
17
right = null;
18
}
19
public TNode(T datavalue)
20
{
21
data = datavalue;
22
left = null;
23
right = null;
24
}
25
26
}
27
public class Mytree<T>
28
{
29
private TNode<T> rootNode; //根结点
30
public TNode<T> RootNode
31
{
32
get { return rootNode; }
33
set { rootNode = value; }
34
}
35
36
public Mytree(T data)
37
{
38
rootNode = new TNode<T>(data);
39
}
40
public TNode<T> CreatNode(T data, TNode<T> leftNode, TNode<T> rightNode)
41
{
42
TNode<T> newNode = new TNode<T>(data);
43
newNode.left = leftNode;
44
newNode.right = rightNode;
45
return newNode;
46
47
}
48
public void InsertLchild(TNode<T> newNode, TNode<T> p)
49
{
50
//将结点添加到树 结点P的左孩子结点,
51
//如果存在,将作为左孩子结点的左孩子结点
52
if (p.left == null)
53
p.left = newNode;
54
else
55
p.left.left = newNode;
56
}
57
public void InsertRchild(TNode<T> newNode, TNode<T> p)
58
{
59
//将结点添加到树 结点P右左孩子结点,
60
//如果存在,将作为左孩子结点的右孩子结点
61
if (p.right == null)
62
p.right = newNode;
63
else
64
p.right.right = newNode;
65
}
66
public void PreOrder(TNode<T> node)
67
{
68
//递归先序算法
69
if (node == null)
70
return;
71
Console.WriteLine(node.data);
72
PreOrder(node.left);
73
PreOrder(node.right);
74
}
75
public void NRPreOrder(TNode<T> node)
76
{
77
//非递归先序算法
78
TNode<T> p=new TNode<T>();
79
p=node;
80
while (p != null)
81
{
82
Console.WriteLine(p.data);
83
p = p.left;
84
}
85
p = node;
86
while (p != null&&p.right!=null)
87
{
88
Console.WriteLine(p.right.data);
89
p = p.right;
90
}
91
}
92
public void delNode()
93
{
94
//不写了,遍历删除就行了.
95
}
96
97
}
98
class Program
99
{
100
static void Main(string[] args)
101
{
102
Mytree<int> mystree = new Mytree<int>(0);
103
TNode<int> node = new TNode<int>(1);
104
TNode<int> node2= new TNode<int>(2);
105
TNode<int> node3 = new TNode<int>(3);
106
mystree.InsertLchild(node, mystree.RootNode);
107
mystree.InsertLchild(node2, mystree.RootNode);
108
mystree.InsertRchild(node3, mystree.RootNode);
109
mystree.NRPreOrder(mystree.RootNode);
110
Console.ReadLine();
111
112
}
113
}
114
}
115
116

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
