def reverseList(lst):
    print("Call:", lst)
    if lst == []:
        print("Return:", [])
        return  []
    else:
        partial = reverseList(lst[1:])
        result = partial + [lst[0]]
        print("Return:", result)
        return result

print(reverseList([1, 2, 3]))

# Alternate approach
def reverseList(lst):
    if lst == []:
        return  []
    else:
        partial = reverseList(lst[:len(lst)-1])
        return [lst[len(lst)-1]] + partial

###

# Came up during discussion
def isPalindrome(s):
    if len(s) <= 1:
        return True
    else:
        if s[0] != s[len(s)-1]:
            return False
        else:
            return isPalindrome(s[1:len(s)-1])

###
        
def getLeaves(t):
    if t == None:
        return []
    elif t["left"] == None and t["right"] == None:
        return [ t["contents"] ]
    else:
        # don't add this node, it's not a leaf!
        result = getLeaves(t["left"]) + getLeaves(t["right"])
        return result

t1 = { "contents" : 3,
      "left"  : { "contents" : 5,
                  "left"  : { "contents" : 1,
                              "left"  : None,
                              "right" : None },
                  "right" : { "contents" : 4,
                              "left"  : None,
                              "right" : None } },
      "right" : { "contents" : 7,
                  "left"  : None,
                  "right" :  None } }

print(getLeaves(t1))

###

def addNodes(t):
    if t == None:
        return 0
    else:
        return addNodes(t["left"]) + addNodes(t["right"]) + t["contents"]

t2 = { "contents" : 3,
      "left"  : { "contents" : 5,
                  "left"  : { "contents" : 1,
                              "left"  : None,
                              "right" : None },
                  "right" : { "contents" : 4,
                              "left"  : None,
                              "right" : None } },
      "right" : { "contents" : 7,
                  "left"  : { "contents" : 8,
                              "left"  : None,
                              "right" : None },
                  "right" :  None } }

print(addNodes(t2))