2017-03-28 5 views
0

次のコードでは、Aは(B、C)、Bは(D、E)、5つの要素を持っています。要素、およびそのノードは、いくつかのいずれかこれは単にrecursionでこのコードをPythonでのツリーのトラバーサル子ノードの印刷後に親ノードを決定する方法

class trees(object): 
    def __init__(self,name,left=None,right=None): 
      self.name = name 
      self.left = None 
      self.right = None 

def inorderTraversal(root): 
    res = [] 
    if root: 
      res = inorderTraversal(root.left) 
      print root.name 
      res = res + inorderTraversal(root.right) 

t1=trees('A') 
t2=trees('B') 
t3=trees('C') 
t4=trees('D') 
t5=trees('E') 

t1.left = t2 
t1.right = t3 
t2.left= t4 
t2.right = t5 

inorderTraversal(t1) 
#prints D,B,E,A,C 

答えて

2

ください説明することができ、次のコードに「B」にノード・スイッチを行う方法Dです。

「B」が印刷された後に何が起こるかについては、「B」が印刷される前に何が起こるかを考えるべきです。

「B」を含むノードの直前にあるルートt2を考えてみましょう(ツリーをt2、t4、t5だけにすることもできます)。次に起こるのは、次のとおりです。

  1. t2の左の子です。最終的に、これは 'D'
  2. プリント 'B'
  3. をt2の右の子であるt5に順番に印刷します。結局、これはその後「E」

を出力します、我々はその子のためにroot is Noneがfalseと評価するので子供のいない木のルートが印刷されていることなど、T2の親に

注意を移動します。したがって、子どものレベルで何も起こらず、私たちはルートまで移動し、その名前を印刷し、何も起こらない子にトラバースします。


あなたのコードでは、「D」を印刷すると再帰によって「B」も印刷されることが保証されています。

のは、我々は唯一の木(T2、(T4、T5))を持っていると私たちはinorderTraversal(t2)を呼び出すと仮定しましょう: (不要な解像度を取り除いた後)何が起こる:

  1. スタートT2

    if t2: (True) 
        inorderTraversal(t4) 
        print 'B' 
        inorderTraversal(t5) 
    
  2. inorderTraversal(T4)を実行して解決する場合は、(T2)

    if t4 (True): 
         inorderTraversal(None) 
         print 'D' 
         inorderTraversal(None) 
    
    print 'B' 
    inorderTraversal(t5) 
    
  3. 中括弧内の用語が何をしているのかを見てみましょう: inorderTraversal(なし)はちょっと注意していますので、ここではt4の名前が表示されます。 だからあなたは<オール開始= "3">印刷 'B' は、印刷より早く表示されていることを、 'D'

    を参照してください
  4. のは、印刷した後、もう一度

    print 'D' 
    print 'B' 
    inorderTraversal(t5) 
    
+0

再帰呼び出しをまとめてみよう'D'は現在ルートがt4ですが、 'B'はどのように印刷されますか。あなたのポイントで今変更がいつ行われますか? – Rajeev

+0

コードで別の例を追加しました。しかし、あなたは本当に再帰に精通していますか?それがここで起こっている唯一の事だ – Quickbeam2k1

+0

私はそれが再帰がどのように機能するかと今思う。 t2でtraverse関数を再度呼び出すのではなく、その子に対してのみコマンドを実行します。だから、t2は、左と右の子が「なし」であるとは見ません。なぜなら、そうではないからです。 Btw、あなたは絶対に何もしないし、おそらく事をより複雑にするので、resを取り除くべきです。 – Quickbeam2k1

関連する問題