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

質問編集履歴

2

疑問点の編集をさせて頂きました

2021/02/26 09:11

投稿

huskies
huskies

スコア2

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,13 @@
19
19
  コードとしては、以下のように記述することで求めるアウトプットを出せるのですが、なぜこちらのコードが成り立つのかが良く理解できていません。
20
20
  例えば、まず `if tree.Left != nil`を通してnodeを1まで進め(リーフノード)、そのループ時はnilとなるので`append`される点までは分かりました。ただ、その後、`if tree.Right !=nil`に進むと思うのですが、この時点で treeは`1`上にあるため、`tree.Right == nil`を返してしまい、関数が終了してしまうのではという理解をしています。
21
21
 
22
+ 疑問点の仮説をまとめさせていただきました。
23
+ - 1のリーフノードに届くまで3回再帰しています。例えば初回の再帰が呼ばれると、ノード自体は5に移動すると思いますが、この時点では tree.Left != nil のif文に入るため、appendまでは行かず、一度ここで止まり(?)処理待ちの状態となる
24
+ - そして, 1に到達すると、if文には入らないため、append, 次のif分を処理し、一度return(?)する
25
+ - その後、処理が止まっていた再帰の処理が新しい順から始まる
26
+
27
+
22
- なぜ、こちらの再帰を利用たアルゴリズムで成り立つのか、ま現状の理解で間違っている点がありましたらご指摘いただけると幸いです。よろしくお願い致します。
28
+ おそらくこちらの流れなのだと思うのですが、再帰をする際にif文にはまると処理待ちの状態になるのか・1に到達てreturnすると処理待ちがなぜ再開するのかりスッキリしていません。加えて、現状の理解で間違っている点がありましたらご指摘いただけると幸いです。よろしくお願い致します。
23
29
  ```Go
24
30
 
25
31
  type BST struct {

1

表記方法の修正

2021/02/26 09:11

投稿

huskies
huskies

スコア2

title CHANGED
@@ -1,1 +1,1 @@
1
- Golangにおけるバイナリーツリー(BST) のループの仕方について
1
+ Golangにおけるバイナリーツリー(BST) の再帰の仕方について
body CHANGED
@@ -1,4 +1,4 @@
1
- Golangのバイナリーツリー(BST)における、ループのやり方について疑問があり質問させていただきます。例えば以下のようなバイナリーツリーが構成されており、こちらをループすることで最小値~最大値を順番とするスライスを生成するとします。
1
+ Golangのバイナリーツリー(BST)における、再帰(Recursion) のやり方について疑問があり質問させていただきます。例えば以下のようなバイナリーツリーが構成されており、こちらを再帰を利用することで最小値~最大値を順番とするスライスを生成するとします。
2
2
  (この場合であれば:[1, 2, 5, 5, 10, 15, 22]が正解)
3
3
 
4
4
 
@@ -19,7 +19,7 @@
19
19
  コードとしては、以下のように記述することで求めるアウトプットを出せるのですが、なぜこちらのコードが成り立つのかが良く理解できていません。
20
20
  例えば、まず `if tree.Left != nil`を通してnodeを1まで進め(リーフノード)、そのループ時はnilとなるので`append`される点までは分かりました。ただ、その後、`if tree.Right !=nil`に進むと思うのですが、この時点で treeは`1`上にあるため、`tree.Right == nil`を返してしまい、関数が終了してしまうのではという理解をしています。
21
21
 
22
- なぜ、こちらのループアルゴリズムで成り立つのか、また現状の理解で間違っている点がありましたらご指摘いただけると幸いです。よろしくお願い致します。
22
+ なぜ、こちらの再帰を利用したアルゴリズムで成り立つのか、また現状の理解で間違っている点がありましたらご指摘いただけると幸いです。よろしくお願い致します。
23
23
  ```Go
24
24
 
25
25
  type BST struct {