-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathc_minus_node.py
96 lines (74 loc) · 1.61 KB
/
c_minus_node.py
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
class Node:
def __init__(self, type, value = None):
self.parent = None
self.type = type
self.value = value
self.children = []
def setType(self, type):
assert type
self.type = type
def setValue(self, value):
assert value
self.value = value
def addChild(self, node):
assert node
assert node != self
node.parent = self
self.children.append(node)
def removeChild(self, node):
self.children.remove(node)
def getFirstChildByType(self, type):
s = []
for c in reversed(self.children):
s.append(c)
while len(s) > 0:
n = s.pop()
if n.type == type:
return n
else:
for c in reversed(n.children):
s.append(c)
return None
def getChildrenByType(self, type):
s = []
children = []
for c in reversed(self.children):
s.append(c)
while len(s) > 0:
n = s.pop()
if n.type == type:
children.append(n)
else:
for c in reversed(n.children):
s.append(c)
return children
def getChildrenByValue(self, value):
s = []
children = []
for c in reversed(self.children):
s.append(c)
while len(s) > 0:
n = s.pop()
if n.value == value:
children.append(n)
else:
for c in reversed(n.children):
s.append(c)
return children
def getFirstChildByValue(self, value):
s = []
for c in reversed(self.children):
s.append(c)
while len(s) > 0:
n = s.pop()
if n.value == value:
return n
else:
for c in reversed(n.children):
s.append(c)
return None
def __str__(self):
if self.value:
return 'node type:{0} value:{1}'.format(self.type, self.value)
else:
return 'node type:{0}'.format(self.type)