質問編集履歴
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
表記方法の修正
    
        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 {
         
     |