Skip to content

Instantly share code, notes, and snippets.

@alex-pat
Created July 16, 2017 13:09
Show Gist options
  • Save alex-pat/41135eb5cf466bfdf45cc86ba401c5cc to your computer and use it in GitHub Desktop.
Save alex-pat/41135eb5cf466bfdf45cc86ba401c5cc to your computer and use it in GitHub Desktop.
#https://www.hackerrank.com/challenges/swap-nodes-algo
class Node:
def __init__(self,data, level=1):
self.data = data
self.left = None
self.right = None
self.level = level
root = Node(1)
n = int(input())
q = [root]
for _ in range(n):
l, r = tuple(map(int, input().split()))
if l != -1:
node = Node(l, q[0].level+1)
q[0].left = node
q.append(node)
if r != -1:
node = Node(r, q[0].level+1)
q[0].right = node
q.append(node)
del q[0]
def prtr(node):
s = [[0, node]]
while s:
step, n = s[-1]
s[-1][0] += 1
if step > 1 or not n:
del s[-1]
elif step == 0:
s.append([0, n.left])
else:
print(n.data, end=' ')
s.append([0, n.right])
print()
def swap(node, level):
q = [node]
while q:
if q[0].level % level == 0:
t = q[0].left
q[0].left = q[0].right
q[0].right = t
if q[0].left:
q.append(q[0].left)
if q[0].right:
q.append(q[0].right)
del q[0]
n = int(input())
for _ in range(n):
lvl = int(input())
swap(root, lvl)
prtr(root)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment