2016-10-25 2 views
-2

は、私はOOPの意味は、基本的にこのhttp://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/PythonでOOPなしでバイナリツリーを作ることは可能ですか?

私は、この検索したが、私は唯一の非再帰的な方法でバイナリツリーを反復処理する方法を見つけるようなクラスノードやものを使用することです。ですから、Pythonでオブジェクトを使わずにバイナリツリーを実行できるかどうかは疑問です。 私がテストしたアプローチの1つは、各項目がノードであり、ノード内の各項目が別のリスト(またはノード)だった複数の入れ子リストを作成することでした。このような何か:

t = [[root], [left], [right]] 

今、私はこれらのノードのそれぞれ1

t[0][0].append(t2) 
t[0][1].append(t3) 

に他のノードを追加することができます。しかし、私は木がどのように多くの次元を持つことになります推測しなければならないと私はで終わるだろうt [0] [0] [0] [0] [0] [0] [0] [0] [0]特定のノードからデータを取得します。私はそれをどうやって行うのか分からず、私はPythonの全面的な話題です。私はCに慣れていますが、誰かを助けなければならないし、OOPを知らない人もいます。彼らはOOPを学ばなくてはなりませんか、Pythonでバイナリツリーを実装する別の方法はありますか?

+3

Pythonの* Everything *はリストと整数を含むオブジェクトです。しかし、はい、Cで言うことができるように、組み込みの型だけを使ってバイナリツリーを構築することができます。Cでこれをどうやって行うのですか? –

+0

どうして? C言語では構造体を作ることができますが、これを行うにはここに何かありますか? – Sebasuraa

+0

['namedtuple'](https://pymotw.com/2/collections/namedtuple.html)を見てください。 –

答えて

1

ここには、dictを使用する単純なバイナリツリーがあります。 inserttraverseの機能しか実装していませんが、これはソートにツリーを使用するのに十分です。

from __future__ import print_function 
from random import shuffle 

D, L, R = 'data', 'left', 'right' 

def insert(tree, data): 
    if tree is None: 
     tree = {D: data, L: None, R: None} 
    elif data <= tree[D]: 
     tree[L] = insert(tree[L], data) 
    else: 
     tree[R] = insert(tree[R], data) 
    return tree 

def traverse(tree): 
    if tree is not None: 
     for data in traverse(tree[L]): 
      yield data 
     yield tree[D] 
     for data in traverse(tree[R]): 
      yield data 

a = list(range(32)) 
shuffle(a) 
print(*a) 

tree = None 
for i in a: 
    tree = insert(tree, i) 

print(*traverse(tree)) 

28 0 14 3 27 15 11 31 19 5 9 22 13 2 20 30 1 8 10 26 18 25 24 6 21 23 7 4 12 29 17 16 
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 

のPython 2または3で実行されます。このコードが、Pythonの3 traverse機能の最近のバージョンでは、よりコンパクトに記述することができ、典型的な出力:

def traverse(tree): 
    if tree is not None: 
     yield from traverse(tree[L]) 
     yield tree[D] 
     yield from traverse(tree[R]) 
関連する問題