# Online Python compiler (interpreter) to run Python online.
# Write Python 3 code in this online editor and run it.
class BNT:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
class BinaryTree:
root = None
que = []
def insert(self, data):
if self.root == None:
self.root = BNT(data)
return
q = []
q.append(self.root)
while len(q) > 0:
temp = q.pop(0)
if temp.left == None:
temp.left = BNT(data)
break
else:
q.append(temp.left)
if temp.right == None:
temp.right = BNT(data)
break
else:
q.append(temp.right)
def insertLevelWise(self, arr):
q = []
q.append(BNT(arr.pop(0)))
while len(q) > 0:
temp = q.pop(0)
if self.root == None:
self.root = temp
left_val = arr.pop(0)
right_val = arr.pop(0)
if left_val != -1:
left = BNT(left_val)
q.append(left)
temp.left = left
if right_val != -1:
right = BNT(right_val)
q.append(right)
temp.right = right
def CreateTreeInAndPre(preorder, inorder):
root = BNT(preorder.pop(0))
idx = inorder.index(root.data)
left = BinaryTree()
right = BinaryTree()
for i in range (0, idx):
left.insert(preorder.pop(0))
for i in range (idx+1, len(inorder)):
right.insert(preorder.pop(0))
root.left = left.root
root.right = right.root
return root
def traverse(root):
if root == None:
return
print(root.data, sep = " ")
traverse(root.left)
traverse(root.right)
def traverseQue(root, que):
if (root == None):
return
print(root.data)
if (root.left != None):
que.append(root.left)
if (root.right != None):
que.append(root.right)
que.pop(0)
if (len(que) > 0):
traverseQue(que[0], que)
def numNodes(root):
if root == None:
return 0
left = numNodes(root.left)
right = numNodes(root.right)
return 1 + left + right
def findMax(root):
if root == None:
return 0
left = findMax(root.left)
right = findMax(root.right)
return max(left, right, root.data)
def findHeight(root):
if root == None:
return 0
return 1 + max(findHeight(root.left), findHeight(root.right))
def numLeafNodes(root):
if (root == None):
return 0
if (root.left == None and root.right == None):
return 1
return numLeafNodes(root.left) + numLeafNodes(root.right)
def atDep(root, k):
if root == None:
return
if k == 0:
print(root.data)
return
atDep(root.left, k-1)
atDep(root.right, k-1)
def removeLeaf(root):
if root == None:
return
if root.left == None and root.right == None:
return True
if (removeLeaf(root.left)):
root.left = None
if (removeLeaf(root.right)):
root.right = None
def checkBalanced(root):
if root == None:
return False
if (root.left == None and root.right != None) or (root.left != None and root.right ==
None):
return False
if root.left == None and root.right == None:
return True
return checkBalanced(root.left) and checkBalanced(root.right)
b = BinaryTree()
# l = [1,2,3,4,5,-1,-1,8,-1,-1,-1,-1,-1]
# b.insertLevelWise(l)
# que = [b.root]
# traverseQue(b.root, que)
inorder = [4,2,5,1,6,3,7]
preorder = [1,2,4,5,3,6,7]
root = CreateTreeInAndPre(preorder, inorder)
traverse(root)