二分木の再帰的構造に自然に沿うように再帰的に処理をおこないます。
vlist = []root = -1 # 木構造の中にノードが無い状態def add(pno, cno, val): if pno >= 0: if val < vlist[pno][0]: # 左の部分木 vlist[pno][1] へ挿入をおこない、 # 挿入を終えた木で vlist[pno][1] を更新 vlist[pno][1] = add(vlist[pno][1], cno, val) elif val > vlist[pno][0]: # 右の部分木 vlist[pno][2] へ挿入をおこない、 # 挿入を終えた木で vlist[pno][2] を更新 vlist[pno][2] = add(vlist[pno][2], cno, val) # val == vlist[pno][0](既に val が木に含まれている) # の場合は、木のどこをも更新しない else: pno = cno return pnodef small_first(pno): if pno >= 0: small_first(vlist[pno][1]) print(vlist[pno][0], end=“, ”) small_first(vlist[pno][2]) returnval = int(input(“give me an integer: ”))while val > 0: vlist.append([val, -1, -1]) # 入力された値 val を木構造へ追加 root = add(root, len(vlist) - 1, val) # 木の要素を小さい順に出力 small_first(root) print() val = int(input(“give me an integer: ”))
質問者からのお礼コメント
ご丁寧な回答をいただき、本当にありがとうございました!