t = { "contents" : 6,
      "left"  : { "contents" : 3,
                  "left"  : { "contents" : 8,
                              "left"  : None,
                              "right" : None },
                  "right" : { "contents" : 7,
                              "left"  : None,
                              "right" : None } },
      "right" : { "contents" : 2,
                  "left"  : None,
                  "right" : { "contents" : 9,
                              "left"  : None,
                              "right" : None } } }

###

def getChildren(t):
    if t == None:
        return  []
    
    result = []
    leftT = t["left"]
    if leftT != None:
        result.append(leftT["contents"])
    rightT = t["right"]
    if rightT != None:
        result.append(rightT["contents"])
    return result

###

def countNodes(t):
    if t == None:
        print("Base case!")
        return 0
    else:
        print("Root:", t["contents"])
        leftCount = countNodes(t["left"])
        rightCount = countNodes(t["right"])
        print("Return Root:", t["contents"], "count",  leftCount + rightCount + 1)
        return leftCount + rightCount + 1

###
    
def countEvenNodes(t):
    if t == None:
        return 0
    else:
        if t["contents"] % 2 == 0:
            rootCount = 1
        else:
            rootCount = 0
        leftCount = countEvenNodes(t["left"])
        rightCount = countEvenNodes(t["right"])
        return leftCount + rightCount + rootCount

###
    
def listValues(t):
    if t == None:
        return []
    else:
        result = []
        result = result + listValues(t["left"])
        #result = result + [ t["contents"] ]
        result.append(t["contents"])
        result = result + listValues(t["right"])
        return result