SHOW:
|
|
- or go back to the newest paste.
1 | - | // ConsoleApplication4.cpp : 定義主控台應用程式的進入點。 |
1 | + | // ConsoleApplication2.cpp : 定義主控台應用程式的進入點。 |
2 | // | |
3 | ||
4 | #include "stdafx.h" | |
5 | #include <iostream> | |
6 | using namespace std; | |
7 | ||
8 | class treenode | |
9 | { | |
10 | public: | |
11 | - | int value=NULL; |
11 | + | int data; |
12 | - | treenode *l=NULL, *r=NULL; |
12 | + | treenode *l, *r; |
13 | treenode(int in){ | |
14 | data = in; | |
15 | - | class tree |
15 | + | this->l = NULL; |
16 | this->r = NULL; | |
17 | } | |
18 | - | void append(int); |
18 | + | |
19 | - | void InOrder(treenode*); |
19 | + | |
20 | - | void PreOrder(treenode*); |
20 | + | class Btree |
21 | - | void PostOrder(treenode*); |
21 | + | |
22 | - | treenode *root = new(treenode); |
22 | + | |
23 | - | private: |
23 | + | treenode *root; |
24 | Btree(){ root = NULL; } | |
25 | void Add_TreeNode(int); | |
26 | - | void tree::append(int in) |
26 | + | void in_order(treenode *pos); |
27 | void pre_order(treenode *pos); | |
28 | - | treenode* pos = root; |
28 | + | void post_order(treenode *pos); |
29 | - | if (root->value == NULL) |
29 | + | void delnode(int value); |
30 | }; | |
31 | - | root->value = in; |
31 | + | |
32 | - | cout << "append " << in << " to root" << endl; |
32 | + | void Btree::Add_TreeNode(int value) |
33 | - | goto end; |
33 | + | |
34 | //cout << "root:" << root << endl; | |
35 | if (root == NULL) | |
36 | { | |
37 | - | if (pos->value < in) |
37 | + | root = new treenode(value); |
38 | cout << "root value=" << root->data << endl; | |
39 | - | if (pos->l != NULL) |
39 | + | |
40 | else | |
41 | - | pos = pos->l; |
41 | + | |
42 | //cout << "rootvalue" << root->data << endl; | |
43 | //cout << "rootl:" << root->l << endl; | |
44 | treenode *pos = root; | |
45 | - | pos->l = new(treenode); |
45 | + | while (true) |
46 | - | pos->l->value = in; |
46 | + | |
47 | - | cout << "append " << in << endl; |
47 | + | /* |
48 | - | goto end; |
48 | + | cout << "posl:" << pos->l << endl; |
49 | cout << "posr:" << pos->r << endl; | |
50 | cout << "pos=" << pos << endl; | |
51 | - | else if (pos->value > in) |
51 | + | */ |
52 | if (value < pos->data) | |
53 | - | if (pos->r != NULL) |
53 | + | |
54 | if (pos->l != NULL) | |
55 | - | pos = pos->r; |
55 | + | { |
56 | pos = pos->l; | |
57 | } | |
58 | else | |
59 | - | pos->r = new(treenode); |
59 | + | { |
60 | - | pos->r->value = in; |
60 | + | pos->l = new treenode(value); |
61 | - | cout << "append " << in << endl; |
61 | + | cout << "add " << value << " at " << pos->l << endl; |
62 | - | goto end; |
62 | + | return; |
63 | } | |
64 | } | |
65 | else | |
66 | { | |
67 | - | cout << pos->value << ' ' << in; |
67 | + | if (pos->r != NULL) |
68 | - | cout << "append same value\n"; |
68 | + | { |
69 | - | goto end; |
69 | + | pos = pos->r; |
70 | } | |
71 | else | |
72 | - | end: |
72 | + | { |
73 | pos->r = new treenode(value); | |
74 | cout << "add " << value << " at " << pos->r << endl; | |
75 | return; | |
76 | - | void tree::InOrder(treenode *pos) |
76 | + | } |
77 | } | |
78 | } | |
79 | } | |
80 | - | InOrder(pos->l); |
80 | + | |
81 | - | cout << '[' << pos->value << ']'; |
81 | + | |
82 | - | InOrder(pos->r); |
82 | + | void Btree::in_order(treenode *pos) |
83 | { | |
84 | if (pos != NULL) | |
85 | { | |
86 | - | void tree::PreOrder(treenode *pos) |
86 | + | in_order(pos->l); |
87 | cout << "[" << pos->data << "]"; | |
88 | in_order(pos->r); | |
89 | } | |
90 | - | cout << '[' << pos->value << ']'; |
90 | + | |
91 | - | PreOrder(pos->l); |
91 | + | void Btree::pre_order(treenode *pos) |
92 | - | PreOrder(pos->r); |
92 | + | |
93 | if (pos != NULL) | |
94 | { | |
95 | - | void tree::PostOrder(treenode *pos) |
95 | + | cout << "[" << pos->data << "]"; |
96 | pre_order(pos->l); | |
97 | pre_order(pos->r); | |
98 | } | |
99 | - | PostOrder(pos->l); |
99 | + | |
100 | - | PostOrder(pos->r); |
100 | + | |
101 | - | cout << '[' << pos->value << ']'; |
101 | + | void Btree::post_order(treenode *pos) |
102 | { | |
103 | if (pos != NULL) | |
104 | { | |
105 | post_order(pos->l); | |
106 | post_order(pos->r); | |
107 | - | tree ta; |
107 | + | cout << "[" << pos->data << "]"; |
108 | - | ta.append(50); |
108 | + | |
109 | - | ta.append(40); |
109 | + | |
110 | - | ta.append(30); |
110 | + | |
111 | - | ta.append(45); |
111 | + | void Btree:: delnode(int value) |
112 | - | ta.append(48); |
112 | + | |
113 | - | ta.append(65); |
113 | + | cout << "pop " << value << endl; |
114 | - | ta.append(70); |
114 | + | treenode *pos = root,*del=pos; |
115 | - | ta.InOrder(ta.root); |
115 | + | if (root == NULL) |
116 | { | |
117 | - | ta.PreOrder(ta.root); |
117 | + | cout << "empty tree\n"; |
118 | return; | |
119 | - | ta.PostOrder(ta.root); |
119 | + | |
120 | while (true) | |
121 | { | |
122 | if (del == NULL) | |
123 | { | |
124 | cout << "can't find this value\n"; | |
125 | return; | |
126 | } | |
127 | else if (del->data != value) | |
128 | { | |
129 | pos = del; | |
130 | if (value>del->data) | |
131 | del = del->r; | |
132 | else | |
133 | del = del->l; | |
134 | } | |
135 | else | |
136 | { | |
137 | if (del->l == NULL&&del->r == NULL) | |
138 | { | |
139 | cout << "delete" << del->data << endl; | |
140 | delete del; | |
141 | if (value > pos->data) | |
142 | pos->r = NULL; | |
143 | else | |
144 | pos->l = NULL; | |
145 | return; | |
146 | } | |
147 | ||
148 | } | |
149 | } | |
150 | } | |
151 | ||
152 | int main() | |
153 | { | |
154 | Btree tr1; | |
155 | const int listnum = 6; | |
156 | int list[listnum] = {8,17,31,9,98,12}; | |
157 | for (int i = 0; i < listnum; i++) | |
158 | tr1.Add_TreeNode(list[i]); | |
159 | cout << "inorder:"; | |
160 | tr1.in_order(tr1.root); | |
161 | cout << "\npreorder:"; | |
162 | tr1.pre_order(tr1.root); | |
163 | cout << "\npostorder:"; | |
164 | tr1.post_order(tr1.root); | |
165 | cout << endl; | |
166 | ||
167 | tr1.delnode(9); | |
168 | return 0; | |
169 | } |