Using Python 3: I am having trouble creating a binary tree and actually using br
ID: 3803440 • Letter: U
Question
Using Python 3:
I am having trouble creating a binary tree and actually using breadth first search to solve this. Any help would be greatly appreciated. I know that this can be easily solved going from bottom up but the goal is to go top to bottom. Thank you in advance.
Link to the text file of the triangle: https://drive.google.com/file/d/0B23lG851VqEdUzFTU1E1bXhObTA/view
Project Euler net Maximum path sum I Problem 18 By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23. 74 2 4 6 8 59 3 That is, 3+7+ 4 9 23. Find the maximum total from top to bottom of the triangle below: 75 95 64 17 47 82 18 35 87 10 20 04 82 47 65 19 01 23 75 03 34 88 02 77 73 07 63 67 99 65 04 28 06 16 70 92 41 41 26 56 83 40 80 70 33 41 48 72 33 47 32 37 16 94 29 53 71 44 65 25 43 91 52 97 51 14 70 11 33 228 77 73 17 78 39 68 17 57 91 71 52 38 17 14 91 43 58 50 27 29 48 63 66 04 6B89 53 67 30 73 16 69 87 40 31 04 62 98 27 23 09 70 98 73 93 38 53 60 04 23Explanation / Answer
Your example seems to want to get sum of adjacent element in breadth first search (i.e., level order gtraversal).
In below code list l is having all element of the given level. You can use that data in any way you want. I did what I get from given example.
Please build your tree and run it.
# link for code https://goo.gl/YY61Kp
# A node structure
class Node:
# A utility function to create a new node
def __init__(self, key):
self.data = key
self.left = None
self.right = None
def getSumUsingLevelOrder(root):
h = height(root)
sum_adjacent = 0
for i in range(1, h+1):
l = []
givenLevelAsList(root, i, l)
if (len(l) == 1):
sum_adjacent += l[0]
continue
sum_adjacent += l[i-2]
return sum_adjacent
# Print nodes at a given level
def givenLevelAsList(root , level, l):
if root is None:
return
if level == 1:
l.append(root.data)
elif level > 1 :
givenLevelAsList(root.left , level-1, l)
givenLevelAsList(root.right , level-1, l)
""" Compute the height of a tree--the number of nodes
along the longest path from the root node down to
the farthest leaf node
"""
def height(node):
if node is None:
return 0
else :
# Compute the height of each subtree
lheight = height(node.left)
rheight = height(node.right)
#Use the larger one
if lheight > rheight :
return lheight+1
else:
return rheight+1
# Driver program to test above function
root = Node(3)
root.left = Node(7)
root.right = Node(4)
root.left.left = Node(2)
root.left.right = Node(4)
root.right.left = Node(6)
root.left.left.left = Node(8)
root.left.left.right = Node(5)
root.right.left.left = Node(9)
root.right.left.right = Node(3)
print "Sum -",
print getSumUsingLevelOrder(root)
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.