私はPythonでデータ構造を作成したいですが、私は非常にC指向です。私は少し助けが必要です。可能な限り多くの子を持つノード
一般に、データを含むNodeクラス、兄弟へのポインタ、子へのポインタ、親へのポインタを作成したいとします。
これはNodeクラスを考えるための方法です:私は、これまでに苦しんだ何
NODE
/ / ... \ \
child_node1 - child_node2 - ... - child_node(N-1) - child_nodeN
は次のとおりです。 私は私が行うことができますので、Nodeクラスのための「+」演算子をオーバーロードしたいですこれは:
node1 = Node("data1")
node2 = Node("data2", 3)
node1 = node1 + node2
したがって、基本的に2つのノード、兄弟を作成します。
は、ここに私のコードです:
class Node:
def __init__(self, data = None, numberOfChildren = 0):
'''
Creates a new Node with *numberOfChildren* children.
By default it will be set to 0, meaning it will only create the root of the tree.
No children whatsoever.
'''
self.__sibling_count = 0
self.__parent = Node()
self.__sibling = Node()
self.__data = data
self.__children = []
if numberOfChildren != 0:
'''
The Node has children and we need to initialize them
'''
for i in range(numberOfChildren):
self.__children[i] = Node()
def getParent(self):
return self.__parent
def getData(self):
return self.__data
def getChild(self, i):
'''
Returns the ith child of the current *Node*.
'''
return self.__children[i]
def __add__(self, other):
'''
Overloads the *+* function so that *Node* objects can be added.
The 2 merged *Node* elements will now be siblings.
ex. node1 = Node()
node2 = Node()
node1 = node1 + node2
'''
if self.__sibling_count == 0:
self.__sibling = other
self.__sibling_count += 1
return self
しかし、私はこのように2つのノードを追加しようとすると:
node1 = Node()
node2 = Node()
node1 = node1 + node2
を私はRuntimeError: maximum recursion depth exceeded
を取得します。なぜこうなった?
、 '私のための範囲(numberOfChildren)に:自己.__子供[I] =ノード()'しませんいずれかの作業。 'parent'と同じ再帰問題が発生するだけでなく、空のリストのインデックスを作成しようとしています。 –