class
Node:
def
__init__(
self
, data):
self
.data
=
data
self
.left
=
None
self
.right
=
None
def
newnode(data):
temp
=
Node(data)
return
temp
def
insert(s, i, N, root, temp):
if
(i
=
=
N):
return
temp
if
(s[i]
=
=
'L'
):
root.left
=
insert(s, i
+
1
, N,
root.left, temp)
else
:
root.right
=
insert(s, i
+
1
, N,
root.right, temp)
return
root
def
SBTUtil(root,
sum
):
if
(root
=
=
None
):
return
[
0
,
sum
]
if
(root.left
=
=
None
and
root.right
=
=
None
):
return
[root.data,
sum
]
left,
sum
=
SBTUtil(root.left,
sum
)
right,
sum
=
SBTUtil(root.right,
sum
)
if
(root.left
and
root.right):
if
((left
%
2
=
=
0
and
right
%
2
!
=
0
)
or
(left
%
2
!
=
0
and
right
%
2
=
=
0
)):
sum
+
=
root.data
return
[left
+
right
+
root.data,
sum
]
def
build_tree(R, N,
str
, values):
root
=
newnode(R)
for
i
in
range
(
0
, N
-
1
):
s
=
str
[i]
x
=
values[i]
temp
=
newnode(x)
root
=
insert(s,
0
,
len
(s),
root, temp)
return
root
def
speciallyBalancedNodes(R, N,
str
, values):
root
=
build_tree(R, N,
str
, values)
sum
=
0
tmp,
sum
=
SBTUtil(root,
sum
)
print
(
sum
, end
=
' '
)
if
__name__
=
=
"__main__"
:
N
=
7
R
=
12
str
=
[
"L"
,
"R"
,
"RL"
,
"RR"
,
"RLL"
,
"RLR"
]
values
=
[
17
,
16
,
4
,
9
,
2
,
3
]
speciallyBalancedNodes(R, N,
str
,
values)