二分木の代替レベルの順序トラバーサル

Raghav patnecha

二分木のレベル順トラバーサルを実行しようとしています。しかし、トリックは通常のレベルの順序トラバーサルではなく、代わりに実行したいと思います。例えば

ここに画像の説明を入力してください

通常レベルの順序トラバーサル: 1 2 3 4 5

私が探しているのは、ルートを印刷するとしましょう。今、私はすべての偶数レベルについて反時計回りに行きたいと思います、そしてすべての奇数レベルについて私は時計回りに行きます:

この種のトラバーサルの場合、出力は次のようになります。 1 2 3 4 5

これは私がこれまでに試したことですが、これは私が達成しようとしているものとはわずかに異なる出力を生成します。

class Node():
    def __init__(self,key):
        self.left = None
        self.right = None
        self.val = key


    # Function to  print level order traversal of tree
    def printLevelOrder(root):
        h = height(root)
        for i in range(1, h+1):     
           printGivenLevel(root, i)

    def printGivenLevel(root , level):
        if root is None:
           return
        if level == 1:
           print(root.val)
        elif level > 1 and level%2 == 0:
             #print("level",level)
             printGivenLevel(root.right , level-1)
             printGivenLevel(root.left , level-1)

        else:
           #print("level",level)
            printGivenLevel(root.left, level-1)
            printGivenLevel(root.right , level-1)


    def height(node):
        if node is None:
           return 0
        else :
        # Compute the height of each subtree 
           lheight = height(node.left)
           rheight = height(node.right)

           #Use the larger one
           if lheight > rheight :
              return lheight+1
           else:
              return rheight+1

# Driver code
root = Node(1)
root.left      = Node(2)
root.right     = Node(3)
root.left.left  = Node(4)
root.left.right  = Node(5)
root.right.left  = Node(6)
root.right.right  = Node(7)
root.left.left.left  = Node(8)
root.left.left.right  = Node(9)
root.right.left.left  = Node(10)
root.right.right.right  = Node(11)


print ("Level order traversal of binary tree is -")
printLevelOrder(root)

このプログラムは次の出力を生成します。

1 3 2 5 4 7 6 10 11 9 8

必要なもの:

1 2 3 7 6 5 4 8 9 10 11

Soumen

関数printGivenLevel()を次のように変更します

def printGivenLevel(root , levelrem, level):                                    
    if root is None:                                                            
       return                                                                   
    if levelrem == 1:                                                           
       print(root.val)                                                          
    elif level > 1 and level%2 == 0:                                            
         printGivenLevel(root.left , levelrem-1, level)    # you had root.right                      
         printGivenLevel(root.right , levelrem-1, level)   # you had root.left                       

    else:                                                                       
        printGivenLevel(root.right, levelrem-1, level)     # you had root.left                    
        printGivenLevel(root.left , levelrem-1, level)     # you had root.right

ここで、levelrem変数はリーフを印刷するタイミングを示し、levelはリーフの実際のレベルを示します。printGivenLevel()を次のように呼び出しますprintGivenLevel(root, i, i)

また、Pythonではインデントが非常に重要です。質問で指定したコードは、そのままでは機能しません。クラスNodeにはinit()メソッドしかないことを理解する必要があります

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

二分木レベルの順序トラバーサル-逆

分類Dev

二分探索木のレベル順トラバーサル

分類Dev

二分探索木の再帰的順序トラバーサル

分類Dev

二分木レベルの順序トラバーサル時間の複雑さ

分類Dev

2つのキューを使用したレベル順トラバーサル二分木

分類Dev

Javaの二分探索木におけるレベル順トラバーサル

分類Dev

二分木の異なるトラバーサル順序のユースケース

分類Dev

Pythonでの二分木レベルの順序走査

分類Dev

二分探索木の順序トラバーサルのためのループレス関数アルゴリズム

分類Dev

バランスの取れた二分木を最小回転でAVL木にコピーするための最良の「順序」トラバーサル

分類Dev

二分木のレベル順トラバーサル(質問の詳細については、以下のコードを参照してください)

分類Dev

順序および事前順序トラバーサルからの二分木の構築の時間計算量

分類Dev

レベル順トラバーサル文字列だけから二分木を構築する方法

分類Dev

二分木ジグザグレベルの順序トラバーサルに対するこのアルゴリズムの時間計算量はどのくらいですか?

分類Dev

二分探索木順序トラバーサルは解決策を理解できません

分類Dev

二分探索木->挿入された値を出力しない順序トラバーサルメソッド

分類Dev

二分木の代替レベルを逆にする

分類Dev

二分木の代替レベルを逆にする

分類Dev

二分木のプレオーダートラバーサルの2つの反復解の違い

分類Dev

二分探索木のプレオーダートラバーサル、再帰vsループ?

分類Dev

toStringのための二分探索木トラバーサル法

分類Dev

平衡二分木の事前注文されたトラバーサル

分類Dev

レベル順トラバーサルから二分木を作成するにはどうすればよいですか?

分類Dev

ダブルポインタを使用した二分木レベルの順序走査

分類Dev

二分木の順序付きイテレータ

分類Dev

二分木がレベルオーダーで満たされている場合、プレオーダートラバーサル配列をレベルオーダートラバーサル配列に(またはその逆に)変換する

分類Dev

二分木トラバーサル(ほとんど)失敗

分類Dev

完全な二分木が与えられた場合、二分木の代替レベルのノードを逆にします

分類Dev

私の二分探索木cプログラムに問題があります。順序トラバーサルを使用しています。ルートノードのみが出力されるのはなぜですか?

Related 関連記事

  1. 1

    二分木レベルの順序トラバーサル-逆

  2. 2

    二分探索木のレベル順トラバーサル

  3. 3

    二分探索木の再帰的順序トラバーサル

  4. 4

    二分木レベルの順序トラバーサル時間の複雑さ

  5. 5

    2つのキューを使用したレベル順トラバーサル二分木

  6. 6

    Javaの二分探索木におけるレベル順トラバーサル

  7. 7

    二分木の異なるトラバーサル順序のユースケース

  8. 8

    Pythonでの二分木レベルの順序走査

  9. 9

    二分探索木の順序トラバーサルのためのループレス関数アルゴリズム

  10. 10

    バランスの取れた二分木を最小回転でAVL木にコピーするための最良の「順序」トラバーサル

  11. 11

    二分木のレベル順トラバーサル(質問の詳細については、以下のコードを参照してください)

  12. 12

    順序および事前順序トラバーサルからの二分木の構築の時間計算量

  13. 13

    レベル順トラバーサル文字列だけから二分木を構築する方法

  14. 14

    二分木ジグザグレベルの順序トラバーサルに対するこのアルゴリズムの時間計算量はどのくらいですか?

  15. 15

    二分探索木順序トラバーサルは解決策を理解できません

  16. 16

    二分探索木->挿入された値を出力しない順序トラバーサルメソッド

  17. 17

    二分木の代替レベルを逆にする

  18. 18

    二分木の代替レベルを逆にする

  19. 19

    二分木のプレオーダートラバーサルの2つの反復解の違い

  20. 20

    二分探索木のプレオーダートラバーサル、再帰vsループ?

  21. 21

    toStringのための二分探索木トラバーサル法

  22. 22

    平衡二分木の事前注文されたトラバーサル

  23. 23

    レベル順トラバーサルから二分木を作成するにはどうすればよいですか?

  24. 24

    ダブルポインタを使用した二分木レベルの順序走査

  25. 25

    二分木の順序付きイテレータ

  26. 26

    二分木がレベルオーダーで満たされている場合、プレオーダートラバーサル配列をレベルオーダートラバーサル配列に(またはその逆に)変換する

  27. 27

    二分木トラバーサル(ほとんど)失敗

  28. 28

    完全な二分木が与えられた場合、二分木の代替レベルのノードを逆にします

  29. 29

    私の二分探索木cプログラムに問題があります。順序トラバーサルを使用しています。ルートノードのみが出力されるのはなぜですか?

ホットタグ

アーカイブ