teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

誤記の修正

2016/11/11 01:26

投稿

majiponi
majiponi

スコア1722

answer CHANGED
@@ -10,8 +10,8 @@
10
10
  void BinaryTree::removeBranch(Node *r) {
11
11
  if (!r) return;
12
12
 
13
- removeAll(r->left);
13
+ removeBranch( r->left );
14
- removeAll(r->right);
14
+ removeBranch( r->right );
15
15
  delete r->left;
16
16
  delete r->right;
17
17
  }

1

修正案の提示

2016/11/11 01:26

投稿

majiponi
majiponi

スコア1722

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