Last
week, Professor Danny said that a programmer always thinks his way is best. As
I was working on e4b.py this week, I found that stubborn programmer mentality
in myself. After reading the assignment description, I made the foolishly
ambitious decision to try to program sum_to_deepest(t)
my own complex way: creating a list of lists, where each inner list contained
the keys in one of the paths. In doing so, I could easily just sum the longest
list, and voila!
The
task set before me was more difficult than expected. I tried to code multiple
recursive functions, sometimes trying to return lists, and at other times
trying to pass down a list that would receive elements with each function call.
Nothing worked, most likely because I didn't understand Python's working of
reference pointers when lists were passed down. Not only did my code not find
all the paths, it also always created a messy, unexpected jumble of nested
lists.
After
mulling over the exercise for a few hours, going back and forth between
thinking, writing, and coding, I eventually gave up and decided to do things
Danny's way (that is: "define a helper function that returns both the
depth of the deepest leaf and the sum along the path to that leaf.").
Using
a similar structure to the preorder traversal, I only had to keep track of two
integers (the sum and the path length) rather than a list and its reference pointer,
which was much easier to handle. Using a dictionary to associate path lengths
with the sum, I was able to easily sum the keys and access the longest path -
an approach that took less than an hour to code and (most importantly) worked! All this made me realize that
the stubborn programmer we often argue with is ourselves. So, the moral of the
SLOG is: don't be afraid to change your approach when coding. Sometimes, a
fresh perspective is the best solution!
No comments:
Post a Comment