白駿1991号:木巡り

1546 ワード


問題解決の考え方
  • ツリーと再帰
  • ✔正解コード
    import sys
    
    N = int(input())
    BST = {}
    
    for i in range(N):
        pN, lN, rN = sys.stdin.readline().split()
        if i == 0: Root = pN
        BST[pN] = (lN, rN)
    
    def preOrder(data):
        print(data, end="")
        if BST[data][0] != '.':
            preOrder(BST[data][0])
        if BST[data][1] != '.':
            preOrder(BST[data][1])
    
    def inOrder(data):
        if BST[data][0] != '.':
            inOrder(BST[data][0])
        print(data, end="")    
        if BST[data][1] != '.':
            inOrder(BST[data][1])
            
    def postOrder(data):
        if BST[data][0] != '.':
            postOrder(BST[data][0])    
        if BST[data][1] != '.':
            postOrder(BST[data][1])
        print(data, end="")
        
    preOrder(Root)
    print()
    inOrder(Root)
    print()
    postOrder(Root)
    print()
  • 資料構造課の課題でBST ADTを実現する場合とは異なり,ディックのストライプを用いて実現することを試みた.以前に作成したコードは、次のアドレスから見ることができます.(実際、問題ツリーはBSTとは異なる)
    https://github.com/ddongseop/datastructure/blob/master/BST/dongseop%20BST.py
  • 3種類のツアーの基本的な方法は多くありません.左または右に値がある場合は、パラメータに値を渡して再帰的に呼び出します.ただし,自分の位置がコードのどの部分にあるかによって,巡回の種類が異なる.

  • ✔関連概念
  • Binary Tree Traversals: PreOrder, InOrder, and PostOrder