回答編集履歴

2

誤記の修正

2016/11/11 01:26

投稿

majiponi
majiponi

スコア1720

test CHANGED
@@ -22,9 +22,9 @@
22
22
 
23
23
 
24
24
 
25
- removeAll(r->left);
25
+ removeBranch( r->left );
26
26
 
27
- removeAll(r->right);
27
+ removeBranch( r->right );
28
28
 
29
29
  delete r->left;
30
30
 

1

修正案の提示

2016/11/11 01:26

投稿

majiponi
majiponi

スコア1720

test CHANGED
@@ -1,3 +1,39 @@
1
1
  デストラクタ使う案は、正直オススメしないです。その環境で動作することは事実ですが、全ての環境で動作する保証はないですし、外部から使えるクラスでnew確保に依存する設計は、あまり綺麗ではないです。
2
2
 
3
+
4
+
5
+ ```C++
6
+
7
+ void BinaryTree::removeAll() {
8
+
9
+ removeBranch( root );
10
+
11
+ delete root;
12
+
13
+ root = nullptr;
14
+
15
+ }
16
+
17
+
18
+
3
- 私は、insertに対応してremoveNode関数を実装するのが正道だと思います。
19
+ void BinaryTree::removeBranch(Node *r) {
20
+
21
+ if (!r) return;
22
+
23
+
24
+
25
+ removeAll(r->left);
26
+
27
+ removeAll(r->right);
28
+
29
+ delete r->left;
30
+
31
+ delete r->right;
32
+
33
+ }
34
+
35
+ ```
36
+
37
+
38
+
39
+ これで動作しませんか?